1. ホーム
  2. sql

[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?

2022-03-18 20:01:06

質問

を取得するのに最適な方法は何ですか? IDENTITY 挿入された行の

について知っています。 @@IDENTITYIDENT_CURRENTSCOPE_IDENTITY が、それぞれに付随する長所と短所を理解していない。

どなたか、それぞれの違いと使用するタイミングを説明していただけませんか?

どのように解決するのですか?

  • @@IDENTITY は、現在のセッションの任意のテーブルに対して、すべてのスコープで最後に生成された ID 値を返します。 ここで注意が必要なのは スコープをまたぐので 現在のステートメントではなく、トリガーから値を取得することができます。

  • SCOPE_IDENTITY() は、現在のセッションと現在のスコープにおいて、任意のテーブルに対して生成された最後の ID 値を返します。 一般的に使用したいのは .

  • IDENT_CURRENT('tableName') は、特定のテーブルに対して任意のセッション、任意のスコープで生成された最後の ID 値を返します。 これは、どのテーブルから値を取得するかを指定するもので、 上のふたつが必要なものでない場合に使用します ( 非常に稀 ). また、@のように ガイ・スターバック レコードを挿入していないテーブルの現在の IDENTITY 値を取得する場合に使用できます。

  • その OUTPUTINSERT ステートメントで挿入されたすべての行にアクセスすることができます。 これは特定のステートメントにスコープされているので よりわかりやすい 上記の他の関数よりも しかし、少し より冗長 (テーブル変数/tempテーブルに挿入し、それをクエリする必要があります) また、ステートメントがロールバックされるようなエラーシナリオでも結果を得ることができます。 とはいえ、もしあなたのクエリが並列実行計画を使用するのであれば、これは 唯一保証された方法 を取得することができます (並列処理をオフにしない限り)。ただし、実行されるのは 前に はトリガーを生成し、トリガーで生成された値を返すために使用することはできません。