Bạn không thể nắm bắt danh tính đã tạo trong CTE. Tuy nhiên, bạn có thể chèn tất cả các hàng vào bảng đích với null
dưới dạng ParentID
và sau đó cập nhật ParentID
trong một tuyên bố cập nhật riêng biệt. Để làm điều đó, bạn có thể sử dụng merge
và một kỹ thuật được mô tả tại đây
.
-- 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
Đây là mẫu hoạt động đầy đủ về SE-Data