2013-05-29 177 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

啊,我误解了问题。 –