插入数据库名称的循环

Loop with DB names inserting

我有许多具有相同结构的 table 和 Table1 的数据库。所有 table 的名字都列在 table testbasesmain1 数据库中。有必要在一个循环中遍历 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...

我怎样才能高效、自动地执行此操作,这样我就不需要在每次添加客户端时都手动更改查询?

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

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