插入数据库名称的循环
Loop with DB names inserting
我有许多具有相同结构的 table 和 Table1
的数据库。所有 table 的名字都列在 table 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...
我怎样才能高效、自动地执行此操作,这样我就不需要在每次添加客户端时都手动更改查询?
如果所有 table 都相同,您可以使用 sp_MSforeachdb
和 IF 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
我有许多具有相同结构的 table 和 Table1
的数据库。所有 table 的名字都列在 table 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...
我怎样才能高效、自动地执行此操作,这样我就不需要在每次添加客户端时都手动更改查询?
如果所有 table 都相同,您可以使用 sp_MSforeachdb
和 IF 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