आप CTE में जनरेट की गई पहचान को कैप्चर नहीं कर सकते। हालांकि आप null
. के साथ लक्ष्य तालिका में सभी पंक्तियों को सम्मिलित कर सकते हैं ParentID
. के रूप में और फिर ParentID
अपडेट करें एक अलग अद्यतन विवरण में। ऐसा करने के लिए आप merge
. का उपयोग कर सकते हैं और वर्णित एक तकनीक यहां
।
-- Helper table to map new id's from source
-- against newly created id's in target
declare @IDs table
(
TargetID int,
SourceID int,
SourceParentID int
)
-- Use merge to capture generated id's
merge BillOfMaterials as T
using SourceTable as S
on 1 = 0
when not matched then
insert (SomeColumn) values(SomeColumn)
output inserted.BomId, S.BomID, S.ParentID into @IDs;
-- Update the parent id with the new id
update T
set ParentID = I2.TargetID
from BillOfMaterials as T
inner join @IDs as I1
on T.BomID = I1.TargetID
inner join @IDs as I2
on I1.SourceParentID = I2.SourceID
यहां SE-Data पर काम करने का पूरा नमूना है।