插入DB名称的循环



我有许多数据库,其中的表Table1具有相同的结构。所有表名都列在testbases表的main1数据库中。在循环中,有必要遍历Table1中的所有行,并将它们插入到查询中。

SELECT * FROM [DBNAME].[DBO].Table1.Client
UNION

以这样的大查询结束:

SELECT * FROM [DBNAME1].[DBO].Table1.Client
UNION
SELECT * FROM [DBNAME2].[DBO].Table1.Client
UNION
SELECT * FROM [DBNAME3].[DBO].Table1.Client
UNION
SELECT * FROM [DBNAME4].[DBO].Table1.Client
UNION
etc...

我该如何高效、自动地做到这一点,这样我就不需要每次添加客户端时手动更改查询了?

如果所有表都相同,则可以使用sp_MSforeachdbIF EXISTS来遍历所有数据库,然后将找到的表插入临时表中。您只需要将列名从col1, col2, ...更改为实际的表架构。尽管您需要排除任何包含Table1表的数据库,但您不希望将其包含在数据集中。

DROP TABLE IF EXISTS #insertTable (col1 varchar(100), col2 varchar(100),...)
DECLARE @command varchar(1000)          
SELECT @command = 'USE ?            
EXEC(''IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ''''Table1'''')         
SELECT col1, col2, ... FROM Table1'')' 

INSERT INTO #insertTable (col1, col2, ...)          
EXEC sp_MSforeachdb @command    

最新更新