2017-04-24 64 views
0

這是一個如此簡單的問題,但我無法弄清楚這樣做的語法。我正在做一些數據遷移,並且我在表中有一些現有記錄,我想鏈接到一個全新的父表。插入父記錄並更新鏈接的孩子

比方說,我有兩個表:

declare @Parent table 
(
    ID int identity(1,1), 
    DummyField int 
) 

declare @Child table 
(
    ID int identity(1,1), 
    ParentID int, -- assume this is a new column, all nulls 
    DummyField int 
) 

對於每個現有的子記錄,插入新的父記錄和更新子鏈接到它。

就是這樣。這很簡單,但是我不能使用遊標來解決它。

+0

那麼簡單,但這樣一個模糊的問題。有沒有身份證明,還是您提供身份證的價值?看起來有點奇怪的是,有一個父母的孩子關係,孩子先到哪裏。也許你可以稍微擴展一下,並提供更多細節。也許使用OUTPUT或MERGE ...但很難告訴你在這裏要做什麼。 –

+0

這兩個表的ID列都是標識列,所以這些值是自動的。這是爲了數據遷移,這就是爲什麼在沒有父母的情況下,子記錄已經存在。 – BradDaBug

+0

步驟1)使用具有ID和ParentID的表變量來填充列,使用ParentID填充來自Child的ID和row_number()。 Step2)從表變量中填入ParentID到Parent表中。第3步)將ID表上的子表加入表變量並更新ParentID。 Step4)Netflix和寒意。 – Anand

回答

1

Seudo SQL邏輯似乎很簡單...

insert in to parent. 

update childern 
set ParentID = select @@IDENTITY 
where ParentID = @previousParentId 

,除非我錯過了什麼嗎?

+0

這適用於單個記錄,但我試圖一次處理多個記錄而不使用遊標。 – BradDaBug

0

關係速滑運動員的肌肉小孩和父母缺少

您HV使用輸出條款才達到這樣,

嘗試這樣,

declare @output table (parentid int) 
insert into parent (parentid) 
output inserted.parentid into @output 
-- values 


update c 
set ParentID = o.parentid 
from children c 
inner join @output o on c.parentid=o.parentid 
+0

是不是在c.parentid設置之前加入? – BradDaBug

+0

@ BradDaBug,你提供什麼細節,我明白了。我會把戰爭腳本轉換成批量插入/更新 – KumarHarsh

相關問題