2013-10-13 88 views
0

我想寫入動態tsql,但系統返回錯誤'無效列'爲什麼?無效列錯誤與動態SQL

DECLARE @WhereClause NVARCHAR(2000) 
DECLARE @SelectStatement NVARCHAR(2000) 
DECLARE @FullStatement NVARCHAR(4000) 

set @WhereClause = 'elad' 
SET @SelectStatement = 'SELECT TOP 1 * FROM elad where ' 
SET @FullStatement = @SelectStatement +'last_name'+'='[email protected] 

EXECUTE sp_executesql @FullStatement 

在此查詢我希望系統返回所有的行,去年name字段等於ELAD, 但系統返回:

消息207,級別16,狀態1,行
列名'elad'無效。'

+2

你的SQL語句的結果TOP 1 * FROM ELAD WHERE姓氏= elad'因而'WHERE'條款試圖比較' last_name「列添加到」elad「列 - 這當然不存在。您需要將字符串文字放入**單引號!** .... –

+0

當您遇到動態查詢問題時,請編寫正確的* static *版本,更改構建動態查詢的腳本以便它**打印**查詢,而不是執行它。查看打印結果並與正確的靜態版本進行比較。如果你不能解決這個問題,*然後*詢問它,告訴我們查詢*應該*看起來像什麼(不要讓我們猜測!)。 –

回答

1

您需要在Where子句中的`選擇添加引號

SET @FullStatement = @SelectStatement +'last_name'+'='''[email protected] + '''' 
+2

但是在閱讀關於SQL注入之前... –

+0

@GrzegorzGierlik答案嚴格按照與問題相關的語法錯誤。當然最好使用'sp_executesql' –