如何将多个数据库作为一个来源进行联合

时间:2017-04-17 15:54:41

标签: sql sql-server database

我的SSMS连接中有40多个数据库(链接服务器),每个数据库都有相同的架构,表格,列,但每个位置都有唯一的数据。我正在寻找最好的方法将它们全部联合到一个VIEW或Alias中,这样我就可以根据数据库/位置分配和识别ID,并且只有一个来源可以查询,以便将来进行交叉引用。

例如,我希望能够查询具有列[order],[item],[amount]的数据库之间的单个公共表,并根据数据库添加额外的列[location]数据来自查询内部。如:

SELECT *
FROM [UnionTableSource]

显示

等结果
Location | Order | Item | Amount
1        | 1234  | 567  | $500
2        | 1234  | 529  | $125
3        | 1279  | 529  | $125
3        | 1234  | 789  | $100

1 个答案:

答案 0 :(得分:5)

您可以创建一个将表联合在一起的视图,例如:

CREATE VIEW AllOrders
AS

SELECT 1 AS Location, Order, Item, Amount FROM [Server1].[Database].dbo.Orders
UNION ALL
SELECT 2 AS Location, Order, Item, Amount FROM [Server2].[Database].dbo.Orders
UNION ALL
SELECT 3 AS Location, Order, Item, Amount FROM [Server3].[Database].dbo.Orders
--etc...

您可以像查看任何视图一样查询它:

SELECT * 
FROM AllOrders 
WHERE Location = 2

请注意,如果此列表中包含40个数据库,性能可能会出现问题,但如果工作负载跨服务器分割,则表格可能会非常大。这基本上是穷人的分区。