在更新时更新存储过程的错误

时间:2015-09-23 17:40:53

标签: sql sql-server datetime stored-procedures

我有这个存储过程更新答案的实际日期但返回转换错误:

ALTER procedure [dbo].[MensajeCompletado] 
    @id int,
    @RESPUESTA nvarchar(50),
    @resp int = 1 output
AS
    if Exists(select * from OFICIOS where IdOficio = @id)
    begin
        update OFICIOS 
        set Respuesta = @RESPUESTA, 
            FechaRecibido = CONVERT(nvarchar(11), GETDATE(), 105), 
            Estatus = 2
        where IdOficio = @id

        set @resp = 0
    end
    else
    begin
        set  @resp = 1
    end

我收到此错误:

  

从字符串转换日期和/或时间时转换失败。

对不起我的英文:)

2 个答案:

答案 0 :(得分:2)

如果FechaRecibidoDATE - 为什么在地球上 ,您将GETDATE()转换为NVARCHAR然后!?

通过转换为GETDATE,只需将SYSDATETIME(或更好:DATE)的输出分配到您的列:

update OFICIOS 
set Respuesta = @RESPUESTA, 
    FechaRecibido = CAST(SYSDATETIME() AS DATE),
    Estatus = 2
where IdOficio = @id

绝对不会转换为nvarchar !!

答案 1 :(得分:1)

它失败了,因为您返回的字符串格式无法隐式转换。只需将CAST改为DATE即可。这应该有效:

ALTER procedure [dbo].[MensajeCompletado] 
    @id int,
    @RESPUESTA nvarchar(50),
    @resp int = 1 output
AS
    if Exists(select * from OFICIOS where IdOficio = @id)
    begin
        update OFICIOS 
        set Respuesta = @RESPUESTA, 
            FechaRecibido = Cast (GETDATE() as Date)
            Estatus = 2
        where IdOficio = @id

        set @resp = 0
    end
    else
    begin
        set  @resp = 1
    end
相关问题