1

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

4

2 回答 2

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
于 2012-12-03T20:06:58.500 回答
1

EXEC()函数创建一个的执行范围。在当前作用域中定义的变量,如 @Error_Return,在 Exec() 函数中将不可用。改为查看sp_executesql

于 2012-12-03T20:12:41.660 回答