我正在准备像这样的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环境不了解外部环境。 Isnt'it?
答案 0 :(得分: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'
答案 1 :(得分:0)
您需要从文本字符串中转义以将变量传递给查询。 'SELECT'+ @ 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),这样可以查看查询变量的运行方式。