我正在使用SQL Server 2008,我有一个类型为@sqlFinal
的变量Varchar(500)
。
我在存储过程运行时填充变量。我想动态返回字符串中的内容以显示结果
SELECT @sqlFinal = 'SELECT @Error_Return AS Final_Report'
--PRINT @sqlFinal
EXEC (@sqlFinal)
但是我收到以下错误
Msg 137,Level 15,State 2,Line 1
必须声明标量变量“@Error_Return”。
答案 0 :(得分:4)
我假设@Error_Return与@SqlFinal的范围相同?
如果您只需要返回@Error_Return的内容,则可以执行以下行:
SELECT @Error_Return as Final_Report
...使其成为静态SQL行而不是动态行。
但是如果这是不可接受的,你可能不得不使用sp_executeSQL。这允许您将变量传递给正在执行的行。
Declare @Error_Return VARCHAR(10)
Set @Error_return= 'Whatever'
exec sp_executesql N'SELECT @Error_Return as Final_Report', N'@Error_Return varchar(10)', @Error_Return
答案 1 :(得分:1)
EXEC()
函数创建新执行范围。在当前作用域中定义的变量(如@Error_Return)在Exec()函数中不可用。请改为sp_executesql。