どのようにしてSQLテーブルのレコードをコピーしますか?新しい行の一意のIDを入れ替えますか?

This questionは私が必要とするものに近いですが、私のシナリオは少し異なります。ソーステーブルと宛先テーブルは同じで、プライマリキーは一意識別子(guid)です。私がこれを試みるとき:

insert into MyTable
    select * from MyTable where uniqueId = @Id;

プライマリキーをコピーしようとしているので、私は明らかにプライマリキー制約違反を取得します。実際には、プライマリキーをまったくコピーしたくありません。むしろ、私は新しいものを作りたいと思っています。また、特定のフィールドを選択的にコピーし、他のフィールドはnullのままにします。問題をもっと複雑にするためには、元のレコードの主キーを取得し、それをコピー内の別のフィールド(PreviousIdフィールド)に挿入する必要があります。

私はこれに簡単な解決策があると確信しています、私はちょうどそれが何であるか知るために十分なTSQLを知りません。

ベストアンサー
これを試して:


insert into MyTable(field1, field2, id_backup)
    select field1, field2, uniqueId from MyTable where uniqueId = @Id;

指定されていないフィールドは、デフォルト値を受け取ります(定義されていない場合は通常NULLです)。

転載記事の出典を記入してください: どのようにしてSQLテーブルのレコードをコピーしますか?新しい行の一意のIDを入れ替えますか? - コードログ