2016-09-29 42 views
-1

我能够将字符串'1989-06-18'插入到数据类型date的SQL Server列中,但是当我尝试使用'2000-01-01'更新同一列时,它抛出错误SQL Server中的更新引发错误

System.Data.SqlClient.SqlException:从字符串转换日期和/或时间时转换失败。

这是我更新查询

CREATE PROCEDURE sp_update 
    @id int, 
    @title varchar(4), 
    @fname varchar(50), 
    @lname varchar(50), 
    @dob varchar(50), 
    @location int, 
    @address varchar(255), 
    @mobile varchar(10), 
    @email varchar(50), 
    @experience int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE ResumeMaster 
    SET Title = @title, 
     FirstName = @fname, 
     LastName = @lname, 
     DateOfBirth = @dob, 
     Location = @location, 
     Address = @address, 
     mobileNo = @mobile, 
     EmailAddress = @email, 
     Experience = @experience, 
     ModifiedDateTime = CURRENT_TIMESTAMP 
    WHERE 
     id = @id; 
END 
+0

使用强制关键字来更新日期。 –

+0

DateOfBirth是Date类型的,参数是varchar,因为我将三个下拉列表中的值连接起来。 –

+0

尝试转换(日期,@ dob,126) –

回答

0

试试这个。

CREATE PROCEDURE sp_update 

    @id int, 
     @title varchar(4), 
     @fname varchar(50), 
     @lname varchar(50), 
     @dob varchar(50), 
     @location int, 
     @address varchar(255), 
     @mobile varchar(10), 
     @email varchar(50), 
     @experience int 
AS 
BEGIN 

    SET NOCOUNT ON; 
    update ResumeMaster 
         set 
          Title = @title, 
          FirstName = @fname, 
          LastName = @lname, 
          DateOfBirth = Cast(@dob as Date), 
          Location = @location, 
          Address = @address, 
          mobileNo = @mobile, 
          EmailAddress = @email, 
          Experience = @experience, 
          ModifiedDateTime = CURRENT_TIMESTAMP 
         where [email protected]; 
END 
+0

仍然有相同的错误... –

0

忽略解答关于您铸造Varchar(50)DateDateTime - 他们不会解决这个问题。唯一的解释是您的字符串@dob不是有效的日期。

这就是为什么您要确保存储过程的参数与要插入的字段匹配。请更改您的@dob参数以匹配字段的数据类型。

0

使用CAST您将字符串指定为日期。

SELECT CAST('2000-01-01' AS Date) AS MyDate