Tạo hai bảng dàn có cùng cấu trúc với bảng đích của bạn nhưng không sử dụng danh tính trên cột recno.
create table parentTmp (
recno int,
groupCode int,
parentdata varchar(80)
);
create table childTmp (
parentrecno int not null,
childdata varchar(80)
)
Tải hàng loạt dữ liệu của bạn vào các bảng dàn, giữ nguyên giá trị recno / parentrecno.
Sau đó, bạn có thể sử dụng hợp nhất và đầu ra để di chuyển dữ liệu từ các bảng sắp xếp.
-- Table variable to hold mapping between
-- SourceRecno and TargetRecno
declare @recno table(SourceRecno int, TargetRecno int);
-- Merge data from parentTmp to parent
-- Output old and new recno to @recno
merge parent T
using parentTmp S
on 0=1
when not matched then
insert (groupCode, parentdata)
values (S.groupCode, S.parentData)
output S.recno, inserted.recno into @recno;
-- Copy data from childTmp to child
-- Use @recno to get the new recno
insert into child(parentrecno, childdata)
select R.TargetRecno, C.childdata
from childTmp as C
inner join @recno as R
on C.parentrecno = R.SourceRecno;
Điều này sẽ chỉ hoạt động trong SQL Server 2008 (và sau này tôi cho rằng).