0

我已經與具有列的客戶表中現有的SQL Server數據庫:提取列到新表,並在同一時間創造一個FK到新表

Customers: CustomerId (PK), A, B, C, D, E, F 

最後三列代表郵政地址;我想將這些地址列提取到單獨的地址表中,由FK鏈接,並同時遷移數據。所以,我認爲結束:

Customers: CustomerId (PK), A, B, C, AddressId (FK) 

Addresses: AddressId (PK), D, E, F 

地址最終會通過許多其他表也被引用,因此它需要自己的獨立AddressId,數據庫生成 - 它不能共享相同的ID的客戶。地址也不能包含客戶的FK - 架構必須如圖所示。

我不太流利的SQL。我毫不費力地創建新的Addresses表,將數據複製到SQL中,然後從Customers中刪除冗餘列。但我不知道如何將數據庫生成的AddressId作爲FK返回給客戶。我是否需要使用某種程序方法一個遊標 - 或者有什麼辦法在一個聲明式SQL查詢中完成整個遷移?謝謝。

(注:我希望能夠內的Code First遷移,最終做到這一點。)

回答

0

我終於想出了答案。您必須使用合併,以便能夠將來自源表和目標表的列輸出到臨時表中:

Declare @MyTableVar table(
CustomerId int not null, 
AddressId int not null 
); 

Merge into dbo.Addresses  
using (select CustomerId, D,E,F from dbo.Customers) as addressDetails 
on 1=0 
when not matched then 
insert (D,E,F) values (Customers.D, Customers.E, Customers.F) 
output addressDetails.CustomerId, inserted.AddressId into @MyTableVar; 
update Customers set AddressId = 
(Select AddressId from @MyTableVar where CustomerId = Customers.CustomerId); 
相關問題