1

我正在准备这样的 SQL 批处理脚本

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

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

EXEC(@query)

正如你所看到的,我已经声明了变量DateRateizzazionePerSA,但是这一步对命令是不可见EXEC的,因为我得到一个错误:

必须声明标量变量“@DateRateizzazionePerSA”。

我能做些什么?似乎 EXEC 环境不知道外部环境。不是吗?

4

2 回答 2

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'
于 2013-05-29T14:19:22.677 回答
0

您需要从文本字符串中转义以将变量传递到查询中。'选择'+@DateRateizzazionePerSA+

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

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

EXEC(@query)

事实上,该变量没有被评估,而是要执行的字符串似乎只是在其中有一个新变量。

为了帮助解决动态 sql 问题,我喜欢做的一件事是将 EXEC(@query) 更改为 PRINT(@query),这样您就可以查看查询变量的运行方式。

于 2013-05-29T14:12:36.597 回答