Sie können die generierte Identität nicht im CTE erfassen. Sie können jedoch alle Zeilen mit null
in die Zieltabelle einfügen als ParentID
und aktualisieren Sie dann ParentID
in einer separaten Update-Anweisung. Dazu können Sie merge
verwenden und eine beschriebene Technik hier
.
-- 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
Hier ist ein vollständiges Arbeitsbeispiel für SE-Data