使用动态SQL返回字符串

时间:2012-12-03 19:40:08

标签: sql sql-server

我正在使用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”。

2 个答案:

答案 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