sql - 在 SQL 中使用记录作为表名

标签 sql sql-server tsql

我有一个表,里面有表名。我想运行一个查询来返回它们,然后将它们用作另一个查询的表名。

select tablenames 
from tablelist

结果:

tablenames
----------
table1
table2
table3

然后我想在查询中一起使用这些表名:

DECLARE @table_name varchar(max)

SET @table_name = (SELECT tablenames from tablelist)

EXEC('SELECT * FROM  ' + @table_name)

我收到以下错误:

Msg 512, Level 16, State 1, Line 2
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我希望它做的是类似的事情:

SELECT * FROM table1
SELECT * FROM table2
SELECT * FROM table3

最佳答案

使用一点动态SQL

示例

Declare @SQL varchar(max) = ''
Select @SQL = @SQL+'Select * From '+quotename(tablenames)+';'+char(13)
  From tablelist
--Print @SQL
Exec(@SQL)

生成的 SQL 看起来像这样

Select * From [table1];
Select * From [table2];
Select * From [table3];

关于sql - 在 SQL 中使用记录作为表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137078/

相关文章:

sql - 在 Sybase ASE 中插入多行

sql - 使用事务更新

sql - 为什么我通过 Start-Job 执行的 SQL 没有返回我期望的答案?

sql-server - SSRS - 报告服务器配置异常(System.Net.Sockets.SocketException(0x80004005): No such host is known )

sql - SELECT 中的 mySQL 变量

sql - 如何选择一个id在顶部的查询,其余id正常排序

sql - 删除具有特定状态值的行(客户)

php - 只获取最新的帖子

sql - 具有最小和最大条件的交叉连接

sql-server - MS sql使用存储过程将随机数设置为参数