2014-09-03 61 views
0

我試圖在@accountType中傳遞一個使用動態SQL的存儲過程的char值。在程序中聲明爲char(4)。當前的錯誤是Incorrect syntax near 'D',如果我嘗試更改它,我會得到invalid column: D在動態SQL中使用CHAR時遇到困難

我不明白動態SQL如何讓我指出變量是char。我已經嘗試過很多方法,這裏是最近的:

set @q = 'Update ' + @statementTable + 
    ' SET Account = '+ @padding + @accountNumber + 
    ' WHERE ClosingDate BETWEEN CAST('''+CONVERT(VARCHAR(20),@proc_dateStart)+''' AS DATE) AND CAST('''+CONVERT(VARCHAR(20),@proc_dateEnd)+''' AS DATE)' + 
    ' AND AccountType =' + ''''+ @accountType +'''' 

值是從我的C#代碼完全相同未來是這樣的:D

沒有單引號或周圍的任何信件。有任何想法嗎?我對此有點卡住了。

回答

1

就像這樣,您需要將參數實際放在字符串語句中,然後當您執行sp_executesql時,然後傳遞每個參數。

DECLARE @q VARCHAR(MAX) 
DECLARE @statementTable VARCHAR(50) 
DECLARE @padding VARCHAR(50) 
DECLARE @accountNumber CHAR(4) 
DECLARE @proc_dateStart VARCHAR(50) 
DECLARE @proc_dateEnd VARCHAR(50) 
DECLARE @accountType VARCHAR(50) 

SET @q = 'Update @statementTable 
SET Account = ''@accountNumber'' 
WHERE ClosingDate BETWEEN CAST(''+CONVERT(VARCHAR(20),@proc_dateStart)+'' AS DATE) AND CAST(''+CONVERT(VARCHAR(20),@proc_dateEnd)+'' AS DATE) 
AND AccountType = ''@accountType''' 

EXEC sys.sp_executesql @sql, N'@statementTable VARCHAR(50),@accountNumber CHAR(4),@proc_dateStart VARCHAR(50), @proc_dateEnd VARCHAR(50),@accountType VARCHAR(50)', 
    @statementTable,@accountNumber,@proc_dateStart,@proc_dateEnd,@accountType;