0
私は親テーブルとその子テーブルを同じテーブルとの間でコピーするこのSO questionに似た状況があります。親テーブルと子テーブルを同じテーブルにコピーしますか?
OUTPUT
とMERGE
を使用して提案された回答はきれいですが、1つのレコードのみを考慮しています。
複数の親行を処理するためにそれを変更する方法はありますか?
EDIT
私はSQLステートメントを変更しようとしましたが、この思い付いた:親行の作品の
DECLARE @fromId int, @toId int;
SET @fromId = 1;
SET @toId = 2;
DECLARE @mapping TABLE (old_id int, new_id int);
INSERT INTO parent_table (col1, col2, col3)
SELECT @toId, col2, col3
FROM parent_table
WHERE col1 = @fromId;
MERGE child_table tgt
USING (
SELECT t.parent_id, t.col2, t.col3
FROM child_table t
inner join parent_table p on p.id = t.parent_id
WHERE p.col1 = @toId
) src
ON 0 = 1
WHEN NOT MATCHED THEN
INSERT (parent_id, col2, col3) VALUES (src.parent_id, src.col2, src.col3)
OUTPUT src.parent_id, INSERTED.parent_id INTO @mapping (old_id, new_id);
最初INSERT
。ただし、2番目の挿入は子行を挿入しません。私は何が欠けていますか?
共有いくつかのサンプルレコード。 parent_id 2での値のホッピングは、子テーブルに存在します。 –