在存储过程中使用动态sql

时间:2014-11-30 21:43:56

标签: sql sql-server-2008

我有一个存储过程,它将以下变量作为参数,该变量包含表名@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'

1 个答案:

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