Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server中的更新引发错误_Sql Server - Fatal编程技术网

Sql server SQL Server中的更新引发错误

Sql server SQL Server中的更新引发错误,sql-server,Sql Server,我能够将字符串“1989-06-18”插入到数据类型为date的SQL Server列中,但当我尝试使用“2000-01-01”更新同一列时,它会抛出错误 System.Data.SqlClient.SqlException:从字符串转换日期和/或时间时,转换失败 这是我的更新查询 CREATE PROCEDURE sp_update @id int, @title varchar(4), @fname varchar(50), @lname varchar(50

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

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
试试这个

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 id=@id;
END

忽略有关将
Varchar(50)
强制转换为
Date
DateTime
的答案-它们不会解决此问题。唯一的解释是您的字符串
@dob
不是有效日期


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

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

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

使用cast关键字更新日期。DateOfBirth类型为date,参数为varchar,因为我正在连接三个下拉列表中的值。请尝试转换(date,@dob,126)@kirankolge这仍然不是使用varchar的原因。事实上.NET类型
DateTime
有一个需要一年、一个月和一个日期的ctor!我认为Convert(Date,@dob,126)是以一种格式显示日期,并返回一个字符串,因此不能解决这个问题。