[英]Dynamic query to Union multiple databases
说我在SQL Server 2008 R2中具有以下数据库
db1, db2, db3, db4, db5......dbn
每个数据库都有一个表A
,其中包含列C1,C2,C3
我可以在两个数据库上编写以下Select
语句以获取它们之间的数据:
Select C1,C2,C3
FROM db1.dbo.A
UNION ALL
Select C1,C2,C3
FROM db2.dbo.A
但是,如果我在同一服务器上有50个数据库,则我不想为每个服务器编写UNION ALL
。
有人可以给我一个脚本来做到这一点吗? 我可以修改脚本以自己排除系统数据库。
谢谢
如果您知道确切的数据库数量:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
UNION ALL
SELECT C1,C2,C3
FROM db' + CONVERT(VARCHAR(2), n) + '.dbo.A'
FROM
(
SELECT TOP (50) n = ROW_NUMBER()
OVER (ORDER BY [object_id])
FROM sys.all_columns
) AS x;
SET @sql = STUFF(@sql, 1, 11, '') + ';';
PRINT @sql;
--EXEC sp_executesql @sql;
如果您不知道确切有50个,那可能更好(它也可以排除不在线的那些):
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
UNION ALL
SELECT C1,C2,C3
FROM ' + QUOTENAME(name) + '.dbo.A'
FROM sys.databases
WHERE state = 0
AND name LIKE N'db[0-9]%';
SET @sql = STUFF(@sql, 1, 11, '') + ';';
PRINT @sql;
--EXEC sp_executesql @sql;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.