2011-09-06 71 views
0

我目前有四個不同的服務器,並且都有許多數據庫。每個服務器都有1-4個數據庫/表,我需要將它們合併到不同的服務器上,並映射到該服務器上的表中的列。如何跨多個SQL服務器操縱數據庫

作爲一個例子,讓我們說這是我的服務器D的創建userId是在DB服務器A中的表中的用戶數據庫,該userName是在服務器B,所述dateUserStarted是服務器C(I知道這是一個愚蠢的設置,它只是例如)

使用SQL Server 2008 R2,我該怎麼做?我也希望運行更新此合併表的SQL Server代理腳本。

我查看了「鏈接的服務器」,似乎無法讓它工作。有什麼我應該使用?

+0

複製是這裏的關鍵字。 –

+1

鏈接的服務器不起作用? – Chains

+2

雖然不確定什麼「似乎無法得到它的工作」的意思,看到我的答案在這裏http://stackoverflow.com/questions/498142/what-is-the-best-way-to-refresh-a-rollup-table下載時需要一個手動但少維護的複製版本。您將此過程放在每臺服務器上,安排它,然後用來自源鏈接服務器的查詢替換。您可以只取所需的表/列/行,並且可以避免在要複製的每個表上都需要時間戳列。 –

回答

1

根據讀取的頻率,數據大小以及服務器之間的帶寬,您可能會擺脫最容易維護的遠程連接解決方​​案。

在服務器D上創建一個數據庫和視圖,這些數據庫將使用鏈接服務器從其他服務器加入三個數據源(userid,userName,dateUserStarted)。 例如,服務器d將有三個鏈接的服務器對象,分別稱爲serverA,serverB和ServerC。

您的視圖看起來像這樣。 (我做了一些關於遠程表主鍵是「Id」的假設)。

Create view vUserData 
as 
SELECT A.userId, B.userName,C.dateUserStarted FROM [serverA].[TheDataBaseName].[dbo].[TableWithUserId] A 
    join [serverB].[TheDataBaseName].[dbo].[TableWithUserName] B on A.userId=B.id 
    join [serverC].[TheDataBaseName].[dbo].[TableWithDateUserStarted] C on A.userId=C.id 
+0

將服務器與其工作的GUI連接起來之後,我一定是搞亂了存儲過程。我正在做你的加入解決方案,只是不在視圖中。 – DFTR