-3

这是我遇到问题的 T-SQL 代码datetime

打开@form_dates
从@form_dates 获取下一个到@cid、@regdate、@compdate

/* 打印@regdate 打印@compdate 这在日期时间中正确具有值。例如:2012 年 3 月 28 日下午 6:03 打印@courseno */

而@@FETCH_STATUS = 0 开始 设置@SQL = N'update tblname set cs' + CAST (@cid AS VARCHAR(10)) + '_begin = @rstring, cs' + CAST (@cid AS VARCHAR(10))+ '_end = @cstring where UserID = '+ CAST (@tempID 作为 VARCHAR(10))

声明 @ParmDefinition nvarchar(500) SET @ParmDefinition = N'@rstring 日期时间,@cstring 日期时间'

执行 sp_ExecuteSQL @SQL,@ParmDefinition, @rstring = @regdate,@cstring = @compdate I have the values of @regdate and @compdate fetched from a cursor and are of the format Jan 3 2012 2:30PM Mar 28 2012 6:03PM but these values are not reflecting in procedure output where I get the output:

update tblname set cs32_begin = @rstring , cs32_end = @cstring where UserID = 419

谢谢。^

4

1 回答 1

1

这与数据类型、日期时间或游标无关。这只是草率不一致的变量命名。在外面你叫他们:

@regstring
@compstring

在里面你叫他们:

@rstring
@cstring

因此,请尝试以一种或另一种方式保持一致:

SET @SQL = N'update tblname set cs' + CAST (@cid AS VARCHAR(10)) 
+ '_begin = @rstring , cs' + CAST (@cid AS VARCHAR(10))
+ '_end = @cstring where UserID = '+ CAST (@tempID AS VARCHAR(10))

DECLARE @ParamDefinition nvarchar(500)
SET @ParamDefinition = N'@rstring datetime, @cstring datetime'

EXECUTE sp_ExecuteSQL @SQL, @ParamDefinition, 
@rstring = @regdate, @cstring = @compdate
^^-------------------^^

编辑

这对我来说很好:

DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'SELECT _begin = @rstring , _end = @cstring;';

DECLARE @ParmDefinition nvarchar(500)
SET @ParmDefinition = N'@rstring datetime, @cstring datetime'

DECLARE @regdate DATETIME = GETDATE(), @compdate DATETIME = DATEADD(DAY, 1, GETDATE());

EXECUTE sp_ExecuteSQL @SQL, @ParmDefinition, 
@rstring = @regdate, @cstring = @compdate;

结果:

_begin                   _end
-----------------------  -----------------------
2012-06-13 10:28:47.657  2012-06-14 10:28:47.657

我看不到你的输出仍然包含文字“@rstring”并且没有被参数正确替换的方法,除非你仍然有拼写或其他变量名不一致。我怀疑这个查询比您向我们展示的内容更多。

于 2012-06-12T21:51:09.700 回答