我有这个存储过程更新答案的实际日期但返回转换错误:
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
我收到此错误:
从字符串转换日期和/或时间时转换失败。
对不起我的英文:)
答案 0 :(得分:2)
如果FechaRecibido
是DATE
- 为什么在地球上 ,您将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