2009-05-26 46 views
2

我有兩個Sql服務器(兩個不同的數據庫,(即兩臺機器))具有相同的結構。有沒有辦法做一個SELECT * FROM(SELECT * FROM TableOnServerA Union SELECT * FROM TableOnServerB)?如何跨多個Sql Server實例進行聯合?

感謝

回答

9

是的,只是將它們設置爲linked servers,然後完全有資格在名字形式LinkName.DatabaseName.SchemaName(dbo).TableName

+0

它是否適用於SQL Server 2005? – Martin 2009-05-26 21:39:29

2
SELECT * FROM serverA.database.owner.TableName 
Union 
SELECT * FROM serverB.database.owner.Tablename 

假設它們設置爲鏈接服務器,用本本上網,進入「鏈接」

0

您可以創建一個鏈接服務器或使用OPENROWSET連接到其他SQL數據庫。

0

您可以通過sp_addlinkedserver存儲過程來運行與兩臺不同機器相關的查詢,從而添加一臺機器。您可以在數據庫服務器實例上運行它,你將要執行的查詢(或兩個,如果要執行任何服務器查詢),這樣

use master 
go 
exec sp_addlinkedserver 
@server='AnotherServer', 
@provider='SQL Server' 

的可以運行

選擇* from AnotherServer.database.dbo.table t1 join database.dbo.table t2 on(t1.id = t2.id)

0

順便提一下,如果它們位於兩臺不同的服務器上,並且您確定數據未重複使用結合所有,它會快得多。也絕不使用select *,指定字段名稱。其他方面,如果有人向A添加列但不向B添加列(或者重新排列B中的列而不是A),我還會添加一列指示數據來自哪兩臺服務器,特別是如果它們可能具有相同的ID號碼,但附加到不同的數據(如果您使用自動生成的ID,可能會發生這種情況)。這可以節省不少麻煩。