繁体   English   中英

如何在SQL 2005中将变量设置为表名称的SQL查询结果的变量

[英]How to set a variable to the result of a sql query with a variable as a table name in SQL 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”

您正在尝试从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注入。

如果要动态构建查询,则可能必须执行use exec之类的操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM