レコードをコピーしてそれ自体に戻す必要があるテーブルがあります。その一環として、OUTPUT 句を使用してテーブル変数に新しい行をキャプチャし、同じプロセスで行に対して他の操作を実行できるようにしたいと考えています。各行に新しいキーとコピー元のキーを含めたい。これは不自然な例です:
INSERT
MyTable (myText1, myText2) -- myId is an IDENTITY column
OUTPUT
Inserted.myId,
Inserted.myText1,
Inserted.myText2
INTO
-- How do I get previousId into this table variable AND the newly inserted ID?
@MyTable
SELECT
-- MyTable.myId AS previousId,
MyTable.myText1,
MyTable.myText2
FROM
MyTable
WHERE
...
INSERT の列数が SELECT ステートメントの列数と一致しない場合、SQL Server は吠えます。そのため、列を MyTable に追加した場合にこれがどのように機能するかはわかりますが、それはオプションではありません。以前は、これはパフォーマンスのボトルネックを引き起こしているカーソルで実装されていました。意図的にそれを回避しようとしています。
可能な限り最高のパフォーマンスを達成する方法でコピーされた行のキーを保持しながら、これらのレコードをコピーするにはどうすればよいですか?