2016-09-23 110 views
-1

我必須比較Server1數據庫A dbo.X和Server2,數據庫B dbo.Y中的表。表X和表Y都包含相同的值。是否可以比較來自不同SQL服務器的表?

,所以我需要驗證兩個表包含所有行和列的值相同。可以做到嗎?

謝謝

+1

當然這是可能的。 – dfundako

+1

'選擇...從完全外部連接上B.primary_key = A.primary_key B其中A.primary_key爲空或B.primary_key爲空或A.not_null_column <> B.not_null_column或聚結(A.null_column,「! @#$%^')<> COALESCE(B.null_column '!@#$%^')...' – shawnt00

回答

1

如果你不想使用像SSIS/Visual Studio中的任何工具,然後鏈接服務器是必需的。

Select * FROM Server1.databaseA.dbo.X 
EXCEPT 
Select * FROM Server2.databaseB.dbo.Y 

EXCEPT從左輸入查詢返回不是由右輸入查詢輸出的不同行。

EXCEPT

+0

因此,可以說,如果我server1的是1.0.0.1和Server2是1.0.3.4然後 '選擇*從1.0.0.1.A.dbo.X' 'EXCEPT' 'SELECT * FROM 1.0.3.4.B.dbo.Y' 是,正確的方法是什麼? – user3174886

+0

是的,如果您的鏈接服務器已安裝。你必須同時運行'X EXECEPT Y'和'Y EXCEPT X'。如果兩者都返回0個記錄,則表中包含相同的記錄。 – p2k

0

當然,你可以通過創建鏈接服務器來完成。請按照本手冊來創建它: Creating Linked Servers

這一點,你將能夠使SQL查詢到這樣的另一臺服務器後:

SELECT name FROM [SRVR002\ACCTG].master.sys.databases ; 
0

還有一種更簡單的方法,如果你已經安裝了Visual Studio 。有一個選項可以將模式和數據與任何服務器進行比較,並且它非常高效,因爲您也可以在工具中更新目標服務器。

的VisualStudio - >工具 - > SQL服務器 - >數據比較