2013-05-29 167 views
1

我準備一個SQL批處理腳本這樣不同的環境

DECLARE @DateRateizzazionePerSA nvarchar(2000) 
DECLARE @query nvarchar(3000) 

SET @query = 'SELECT @DateRateizzazionePerSA = COALESCE(@DateRateizzazionePerSA+ '', '', '''') + a.RataStr FROM (SELECT DISTINCT RataStr =' 
      +' . . . ' 

EXEC(@query) 

正如你可以看到我已經宣佈varaible DateRateizzazionePerSA但是這一步是無形EXEC命令,因爲我得到一個錯誤:

Must declare the scalar variable "@DateRateizzazionePerSA".

我該怎麼辦?看來EXEC環境不知道外部環境。 Isnt'it?

+0

([執行在EXEC SQL時,使用在字符串變量值]的可能重複http://stackoverflow.com/questions/11052749/using-variable-value-in-string-when-executing-exec- in-sql) – Pondlife

回答

1

sp_executeSQL可用於共享範圍之間的數據;

DECLARE @DateRateizzazionePerSA nvarchar(2000) = 'Foo' 
DECLARE @query nvarchar(3000) 

SET @query = 'SELECT @DateRateizzazionePerSA += ''Bar''' 

EXEC sp_executeSQL @query, 
    N'@DateRateizzazionePerSA nvarchar(2000) OUTPUT', 
    @DateRateizzazionePerSA OUTPUT 

SELECT @DateRateizzazionePerSA 

== 'FooBar' 
0

你需要逃出你的文本字符串中的變量傳遞到查詢。 「SELECT」 + @ DateRateizzazionePerSA +

DECLARE @DateRateizzazionePerSA nvarchar(2000) 
DECLARE @query nvarchar(3000) 

SET @query = 'SELECT '[email protected]+ '= COALESCE('[email protected]+ '+ '', '', '''') + a.RataStr FROM (SELECT DISTINCT RataStr =' 
      +' . . . ' 

EXEC(@query) 

因爲它是,變量沒有被計算,而要執行的字符串似乎只是它裏面一個新的變量。

我喜歡幫助排查動態sql的一件事是將EXEC(@query)更改爲PRINT(@query),它允許您查看如何運行查詢變量。

+0

無需評估該變量。評價過程是旁邊@query設置 –

+0

啊,我誤解了問題。 –