2016-02-25 130 views
0

我修改了開發數據庫中的表,並希望使用開發服務器中的新數據更新生產數據庫上的同一個表。請讓我來解釋一下這個...SQL Server 2008:使用主鍵更新表

例如,

發展表:

表名:ParentTableParentID是自動遞增#和主鍵)

ParentID  Name Value 
------------------------------ 
1    Z  A-1 (change value to Z) 
2    B  B-1 (will delete the record completely) 
3    C  C-1 
4    D  D-1 
5    E  E-1 
6    F  F-1 
7    G  G-1 
8    H  H-1 
9    I  I-1 

生產表:

表名:ParentTableParentID是自動遞增#和主鍵)

ParentID  Name Value 
----------------------------- 
1    A  A-1 
2    B  B-1 
3    C  C-1 
4    D  D-1 
5    E  E-1 
6    F  F-1 
7    G  G-1 
8    H  H-1 
9    I  I-1 

首先,請注意ParentID是自動遞增#並且也是主鍵。 ParentTable與其他人之間也有關係。

在開發服務器,我從「A」更名爲「Z」與parentID# 1,而我也刪除了記錄parentID# 2

由於parentID# 2記錄已被開發服務器上刪除,以爲我會從生產服務器上的相關ParentID# 2其他表中刪除任何記錄。

什麼是對生產更新ParentTable一個很好的方式,看起來爲ParentTable開發服務器上的完全一樣?

在此先感謝

+0

這是一次性更新還是這是持續性/即時性需求? – 2016-02-25 21:29:57

+0

只有一次更新。謝謝 – Milacay

回答

1

假設兩個數據庫位於同一臺服務器(或鏈接服務器)上。你可以做一個MERGE查詢。如果不是,您可以使用UPDATE查詢更新值。

MERGE INTO ProductionDB.Schema.ParentTable A 
USING DevelopmentDB.Schema.ParentTable B 
ON A.ParentID = B.ParentID 
WHEN MATCHED THEN 
UPDATE SET A.Name = B.Name, A.Value = B.Value; 

當然要替換你的服務器/數據庫名稱。但這是你正在尋找的一個粗略例子。

+0

對不起,數據庫位於不同的服務器上,但我已經創建了LinkedServer。我還可以使用MERGE嗎? – Milacay

+0

是的。這也應該在鏈接服務器上工作。只要你可以參考兩個表。 – ale8oneboy

+0

您可以根據我發佈的這兩張表格爲我提供示例嗎?我擔心在維修之夜我無法弄清楚。謝謝。 – Milacay

1

我可能會嘗試一些像:

declare @parentOffset int 
begin transaction 

select @parentOffset = max(ParentID) from Prod.dbo.ParentTable (holdlock) 

set identity_insert Prod.dbo.ParentTable on 

insert into Prod.dbo.ParentTable (ParentID , Name , Value) 
select Dev.dbo.ParentTable.ParentID + @parentOffset , Dev.dbo.ParentTable.Name , Dev.dbo.ParentTable.Value 
from Dev.dbo.ParentTable.ParentTable 

set identity_insert Prod.dbo.ParentTable off 

insert into Prod.dbo.ChildTable (ParentID , SomeOtherField) 
select Dev.dbo.ChildTable.ParentID + @parentOffset , Dev.dbo.ChildTable.SomeOtherField 

commit transaction 

顯然,測試它反對的東西脫機副本你扣動扳機在生產之前,並會提出一些錯誤處理,但這應該得到工作完成。它不會測試以查看錶中是否已有值,但您可以通過臨時表進行稍微修改&。目前還不清楚這是你的情況,還是你只是想補充。

+0

非常感謝你提供的例子。這對我行得通。我將創建另一個表並首先對其進行脫機測試。 – Milacay

相關問題