2014-03-06 96 views
0

請參閱下面的代碼:必須聲明標量變量「@Value」

declare @value as nvarchar(100) 
declare @sql as nvarchar(100) 
set @Value = ' WHERE [email protected]' 

set @sql='SELECT * FROM person ' + @Value 
EXECUTE sp_executesql @sql 

我得到的錯誤是:必須聲明標量變量「@Value」。爲什麼是這樣?

+0

無論是「重複」的問題是有關這一個。第一個涉及參數化無法參數化的內容(列訪問和表訪問)。至於第二,可變腸衣在這裏是紅鯡魚。 –

回答

4

動態SQL是單獨執行的,所以變量不可用(set @Value ='WHERE ID = @ Value'),所以你需要讓sp_executesql爲自己聲明它們。

你可以做的就是把它們放入如下:

EXECUTE sp_executesql @sql, '@Value nvarchar(100)', @Value = @Value;

另見這個問題:How to set value to variable using 'execute' in t-sql?

+0

你確定嗎?據我所知,他們是基於會話的。多年來一直沒有使用動態SQL,但對我來說,這聽起來像是一個完全正確的場景。 – TomTom

+0

當然,這是sp_executesql採用參數定義的全部目的。 http://technet.microsoft.com/en-us/library/ms175170.aspx –