我的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
答案 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个数据库,性能可能会出现问题,但如果工作负载跨服务器分割,则表格可能会非常大。这基本上是穷人的分区。