如何在SQL 2005中使用变量作为表名将sql查询的结果设置为变量

时间:2013-03-04 16:42:06

标签: sql tsql sql-server-2005

我目前在编写存储过程时遇到问题,并将int类型变量的值设置为带有变量作为表名的select语句的结果。我看过旧线程并尝试了多种方法,但没有运气。如果我没有收到有关表名的错误,我最终会收到有关变量转换问题的错误。我一直在研究这个问题太久了,任何帮助都会受到赞赏。下面是我的代码的一部分。感谢

DECLARE @BATCHNUMBER VARCHAR  --value set in earlier code
DECLARE @ETABLE VARCHAR(50); --the table name
DECLARE @FIRSTDOCID INT;      
SET @ETABLE = 'tablename_' + @BATCHNUMBER; --CREATE FIRST TABLE NAME

SELECT @FIRSTDOCID = MIN(D0CID) FROM @ETABLE

我得到的错误是:必须声明表变量“@ETABLE”

2 个答案:

答案 0 :(得分:1)

您正在尝试从VARCHAR中选择,而不是从表中进行选择。使这项工作的唯一方法是使用动态SQL。

DECLARE @SQL NVARCHAR(250);
SET @SQL = 'SELECT @OUTPUT = MIN(D0CID) FROM ' + QuoteName(@ETABLE);
EXEC sp_executeSql @SQL, N'@output INT OUTPUT', @FIRSTDOCID OUTPUT;

SELECT @FIRSTDOCID;

但是,我不建议使用动态SQL,因为这通常会导致SQL注入。

答案 1 :(得分:0)

如果您正在动态构建查询,则可能需要执行类似exec的操作:

SET @QUERY = "SELECT" + ...etc.
exec(@QUERY)

由于ETABLE是一个varchar,而不是预期的“表变量”。