2012-06-12 40 views
-3

這裏就是我在與datetimedatetime和sp_executesql的

OPEN @form_dates
FETCH NEXT FROM @form_dates INTO @cid, @regdate, @compdate

/* PRINT @regdate PRINT @compdate This is correctly having values in datetime. eg: Mar 28 2012 6:03PM PRINT @courseno */

WHILE @@FETCH_STATUS = 0 BEGIN 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 @ParmDefinition nvarchar(500) SET @ParmDefinition = N'@rstring datetime, @cstring datetime'

EXECUTE 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

感謝我的問題,T-SQL代碼。^

+0

歡迎使用StackOverflow:如果您發佈代碼,XML或數據樣本,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)格式和語法突出顯示它! –

+1

請顯示'@SQL,@regdate和@ compdate'的定義,並解釋遊標和值來自哪裏的查詢。您要求我們徹底排除故障。 –

+0

當你簡化的時候會發生什麼(例如我給出的例子,你只是'SELECT')?我也不明白你的意思是「這些值在程序輸出中沒有反映出來」 - 你如何在你的代碼樣本的最後一行得到輸出?你使用'PRINT @ SQL'嗎?如果是這樣,請記住,在使用'sp_executeSQL'後,'@ SQL'不會替換字符串中的值。 –

回答

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」,並沒有得到正確的參數替代,除非你仍然有拼寫或方式其他變量名稱不一致。我懷疑這個查詢比您向我們展示的要多。

+0

感謝您的回覆。我不小心發佈了不一致的代碼。 但它不適用於正確的參數。 –

+0

@RohanWarkad太棒了,你能解決你的問題中的代碼示例,並向我們展示你現在接收到的輸出嗎? –

+0

我一直在輸出'代碼' 更新tblname設置cs30_begin = @rstring,cs30_end = @cstring其中UserID = 275'代碼' 當我實際上期待'代碼'@rstring; @cstring'code'具有相應的變量值 –