ターゲット テーブルと同じ構造を持つ 2 つのステージング テーブルを作成しますが、recno 列で ID を使用しないでください。
create table parentTmp ( recno int, groupCode int, parentdata varchar(80) ); create table childTmp ( parentrecno int not null, childdata varchar(80) )
プレ>recno/parentrecno の値をそのままにして、データをステージング テーブルに一括読み込みします。
次に、マージ を使用できます および 出力 ステージング テーブルからデータを移動します。
-- 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;
プレ>これは、SQL Server 2008 (およびそれ以降と思われます) でのみ機能します。