2017-04-17 23 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的答案。 –

相關問題