sql - 如何将多个数据库合并为一个源

标签 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

最佳答案

您可以创建一个将表 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/

相关文章:

java - servlet 中无效的 sql 语句

sql server数据透视表查询

SQLite 到 Postgres 层次结构查询

php - SQL 如何将多个表中的数据插入和选择到单个表中并使用不同的列?

mysql - 列名和撇号

mysql - 统计用户是否已达到借用限制

sql - 更新时间存储过程更新错误

sql-server - 插入前检查现有记录

mysql - 用于使用多个文件更新多个数据库的 Bash 脚本

mysql - phpmyadmin 外键问题