2016-02-18 119 views
0

我會嘗試用例子來解釋。 我有兩個SQL數據庫DB1和DB2,每個數據庫都有相同的表。基本上所有東西都是相關的(主鍵是自動增量),但我們決定使用DB1作爲主數據源,並使用DB1的信息更新DB2。我可以使用合併,但是關於DB2的關係會發生什麼?我需要刪除所有內容,並使用DB1而沒有任何關係作爲普通表格和DB1的十個拉取信息?我需要保持與DB1相同的主鍵。如何用相同的自動增量參數更新DB2?更新兩個關係表

例如:

TAB1

tab1_primary_key A B C 
1     X1 X2 X3 
2     X5 X1 X2 
3     ... 

TAB2

tab_2_primary tab1_foreign_key  B D C 
    1   1     X1 X2 X3 
    2   2     X5 X1 X2 
    3   3     ... 
+0

如果你有,因爲你不能更新標識值來更新你非常不走運的數據。如果這是新數據,您可以打開identity_insert插入新數據。 https://msdn.microsoft.com/en-us/library/ms188059.aspx –

+0

如果數據到達DB2的唯一方式來自您的合併語句,我只會刪除輔助BD上的標識(如果輔助BD用於例如報告目的)。如果它不止於此,就像故障轉移一樣。你應該看看複製。 – mxix

+0

這通常是使用複製來解決的 - 這裏是來自Microsoft的關於在SQL Server上覆制的DL https://msdn.microsoft.com/zh-cn/library/ms151198.aspx Redgate還製作了許多工具,可以啓用這些工具功能。 – Hogan

回答

1

在TAB1主鍵應該反映在TAB2相同的外鍵下,如果一切設置正確。不要擔心Tab2中的主鍵,因爲這只是一個ID。您可以刪除foreign_key關係並仍然使用合併中的值。

此外,你可以做一個SQL合併做這樣的事情:

MERGE INTO dbo.Tab2 AS target 
USING dbo.Tab1 AS source 
    ON target.tab1_foreign_key = source.tab1_primary_key 
WHEN MATCHED THEN 
    UPDATE SET target.A = source.A, 
target.B = source.B, 
target.C = source.C, 
target.D = source.D 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (A,B,C,D,E) 
VALUES (source.A,source.B,source.C,source.D,source.E);