Sql server 查询表中的列表,然后在select语句中使用该列表
假设我有一个包含其他表列表的表Sql server 查询表中的列表,然后在select语句中使用该列表,sql-server,ssms,Sql Server,Ssms,假设我有一个包含其他表列表的表 Declare @MyList varchar(max) @MyList = Select tablename from ListofTables 它带来了50个表名的列表 如何在单个select语句中使用该表名列表?我在想一个for循环什么的 For each tablename in @MyList Select * from tablename 您可以尝试下一种方法: -- Table CREATE TABLE #ListOfTables ( [T
Declare @MyList varchar(max)
@MyList = Select tablename from ListofTables
它带来了50个表名的列表
如何在单个select语句中使用该表名列表?我在想一个for循环什么的
For each tablename in @MyList
Select * from tablename
您可以尝试下一种方法:
-- Table
CREATE TABLE #ListOfTables (
[TableName] varchar(max)
)
INSERT INTO #ListOfTables
([TableName])
VALUES
('Table1'),
('Table2'),
('Table3'),
('Table4'),
('Table5'),
('Table6'),
('Table7'),
('Table8'),
('Table9')
-- Statement
DECLARE @stm nvarchar(max)
SET @stm = N''
SELECT @stm = @stm + N'SELECT * FROM ' + QUOTENAME([TableName]) + N'; '
FROM #ListOfTables
/*
-- Or using FOR XML PATH
SELECT @stm = (
SELECT CONCAT(N'SELECT * FROM ', QUOTENAME([TableName]), N'; ')
FROM #ListOfTables
FOR XML PATH('')
)
*/
PRINT @stm
EXEC sp_executesql @stm
如果
ListofTables
有多个表名,您的第一个版本就不会像您预期的那样工作。这是我将使用的方法,也可以使用表变量而不是临时表。还应该了解数据库和模式,或者在查询中使用数据库和模式,或者更好地在表名表中使用数据库和模式。