我有一个存储过程,它将以下变量作为参数,该变量包含表名@percapHist
。它将包含类似“percaphist1408
”的值。
我想计算表中的记录数,并将值保存在稍后要使用的变量中。我现在尝试使用dynamic sql
。语句快速编译,但运行时说我必须声明scalar variable @percapcount
。这是在存储过程中使用的动态sql语句。
SET @tsql = 'SELECT @percapCount = Count(socSecNo) FROM ' + @percapHist
EXEC(@tsql)
当我在执行上述语句后检查变量@tsql时,我看到以下内容
SELECT @percapCount = Count(socSecNo) FROM percapHist1408
但是当我运行上面的EXEC时,我得到'必须声明标量变量@perapcount
'
答案 0 :(得分:1)
如果要从动态SQL返回值,请使用sp_executesql
:
DECLARE @tsql nvarchar(max);
DECLARE @percapCount int;
SET @tsql = 'SELECT @percapCount = Count(socSecNo) FROM ' + @percapHist;
EXEC sp_executesql @tsql, N'@percapCount INT OUTPUT', @percapCount = @percapCount OUTPUT;