如何将表名作为SQL Server存储过程中的变量处理

时间:2014-11-30 19:23:45

标签: sql sql-server-2008

我在SQL Server存储过程中运行以下SQL select语句时遇到问题:

SELECT @percapCount = count(socSecNo)
FROM @percapHistPrev

似乎并不了解@percapHistPrevsocsecno是什么。我已经在存储过程中声明了@percapCount@percapHistPrev

以下声明就在其上方

SELECT @memberCount = count(socSecNo)
FROM member

我猜测尝试使用表名作为变量是问题所在。那么如何修复声明才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

您需要使用输出参数和sp_executeSQL调用。例如

DECLARE @ctr int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @tblName varchar(30);

SET @tblName='member'
SET @ctr = 0
SET @SQLString = N'SELECT @ctrOUT = count(SocSecNo) FROM '+@tblName 
SET @ParmDefinition = N'@ctrOUT int OUTPUT';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @ctrOUT=@ctr OUTPUT;
SELECT @ctr