我的 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
最佳答案
您可以创建一个将表 UNION 在一起的 View ,例如:
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...
您可以像查询任何 View 一样查询它:
SELECT *
FROM AllOrders
WHERE Location = 2
请注意,如果您在此列表中有 40 个数据库,性能可能会成为一个问题,但如果表非常大,因为工作负载分散在服务器之间,它甚至可能表现得相当好。这基本上是穷人的分区。
关于sql - 如何将多个数据库合并为一个源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454847/