2017-04-17 24 views
3

我在SSMS连接中有40多个数据库(链接服务器),每个数据库都有相同的模式,表格,列,但每个位置都有唯一的数据。我正在寻找最好的方法将它们联合到一个VIEW或Alias中,这样我就可以根据数据库/位置来分配ID和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

使用所需的列创建视图。我希望你耐心等待,因为一次查询40个远程数据库的表现不会很好。 –

回答

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个数据库,性能可能会成为问题,但如果这些表格非常大,因为工作负载会跨服务器分离,那么性能可能会相当不错。这基本上是穷人的分区。

+3

我会让这个联盟所有,以避免检查重复。 :) –

+0

它会删除在这种情况下是不需要的额外性能命中。 UNION ALL返回所有行,并不检查愚蠢行为。 –

+0

其次,肯定会建议更改使用UNION ALL的答案。 –

相关问题