私たちの会社の誰かが、scope_identity を使用すべき場所で ident_current を使用しました (そして、現在は OUTPUT を使用する必要があります)。何百万ものレコードのデータ インポートが実行されているのと同時に、アプリケーションがレコードを挿入していたことがありました。その後のレコードのインポートで間違った ID が子レコードに添付され、データの整合性の問題が発生し、その問題を特定して修正するのに長い時間がかかりました。挿入したばかりの値を取得するために ident_current を使用する必要がある状況はありません。これは、データの完全性の問題を保証するものです。
OUTPUT を使用できるバージョンの SQL サーバーを使用している場合は、この方法が推奨されます。OUTPUT は、挿入されたばかりの ID を提供するだけでなく、挿入された他の値も提供できるため、複数のレコード挿入の値を単一のレコード挿入と同様に簡単に取得できます。削除されたものや削除されたものを見つけるためにも使用できます。更新しました。そのため、非常に価値のあるツールです。基本的に、必要な列を含むテーブル変数を設定し、INSERT、UPDATE、または DELETE で OUTPUT 句を使用します。その後、テーブル変数を使用して、他の処理ステップに必要な情報を取得できます。挿入ステートメントで出力を使用して何ができるかを確認するためのいくつかの例:
DECLARE @MyTableVar table( MyID int,
MyName varchar(50));
INSERT MyTable1 (MYName)
OUTPUT INSERTED.MyID, INSERTED.MyName
INTO @MyTableVar
VALUES ('test');
--Display the result set of the table variable.
SELECT MyID, MyName FROM @MyTableVar;
--Display the result set of the table.
Insert into table2 (MyID,test2, test2)
SELECT MyID, 'mttest1', 'mytest2' FROM @MyTableVar;
Insert into table2 (MyID,field1, InsertedDate)
SELECT MyID, s.Field1, getdate() FROM @MyTableVar t
join stagingtable s on t.MyName = s.MyName