4

親子関係を持つ2つのテーブルがあります。レコードの一部を、親子関係はあるがテーブル構造がわずかに異なる 2 つの他のテーブルにコピーしたいと考えています。

両方のテーブル セットに関連する外部キー、整数列があります。すべてのテーブルで、主キー列の ID 増分がオンになっています。

ソースのSELECT INTO親テーブルから宛先の親テーブルに移動すると、宛先レコードの主キーの値がソース レコードと異なり、親子関係が失われます。

新しい親テーブルに新しい主キーの値があるとすれば、コピー中にこの関係を維持する方法を知っている人はいますか? ソース テーブルの主キー値がコピー先に存在しないという保証はないため、このコピー手順の間、新しいテーブルの ID 増分をオフに設定したくありません。

私の説明が理にかなっていることを願っています。ご意見をお寄せいただきありがとうございます。さらに明確にすることができるかどうか教えてください。

4

2 に答える 2

4

これを行ったとき、新しいテーブルへの挿入後に古い ID を保持することで行いました。

古い ID で一時的な列を追加する人もいますが、私はもっと良い方法を知っています。

OUTPUT句を使用して、挿入されたレコードを一時テーブルに挿入できます(新しいIDと古いIDをマッピングテーブルとして使用します。次に、子レコードを挿入するときにそれに結合します。

このようなもの(粗い)

DECLARE @MyTableVar TABLE (
    NewID INT,
    OldID INT
)

INSERT NewParentTable
OUTPUT
    INSERTED.ID,
    old.ID
INTO @MyTableVar
SELECT *
FROM OldParentTable old


INSERT NewChildTable
SELECT
    old.ID,
    t.NewID,
    old.name
FROM OldChildTable old
INNER JOIN @MyTableVar t ON t.OldID = old.ParentID
于 2010-10-19T16:46:03.923 に答える
1

対応するparentIDを使用して、テーブルの別の列に元のIDを維持する必要があります。したがって、リンク先のテーブルに、parentID_orig 列 (自動付番ではない) を追加して、リンクを保持する必要があります。

于 2010-10-19T16:44:48.030 に答える