【SQL Server】最後にインサートされた IDENTITY の値を取得する

SQL Server
この記事は約2分で読めます。

最後にインサートされた IDENTITY の値を取得する関数には次の3つです。

  1. @@IDENTITY
  2. SCOPE_IDENTITY()
  3. IDENT_CURRENT(‘テーブル名’)

それぞれ下記の特徴があります。

セッション スコープ
@@IDENTITY 現在のセッション 関係ない
SCOPE_IDENTITY() 現在のセッション 現在のスコープ
IDENT_CURRENT(‘テーブル名’) 関係ない 関係ない

 

用途に分けて使い分けます。

現在の処理中でテーブル関係なく、トリガーを含め最後に使ったIDENTITY の値を取得したい。

@@IDENTITY

現在の処理内でテーブル関係なく、自分で処理した範疇で最後に使ったIDENTITY の値を取得したい。

SCOPE_IDENTITY()

現在の処理、自分で処理した範疇関係なく、指定したテーブルに対して最後に使ったIDENTITY の値を取得したい。

IDENT_CURRENT(‘テーブル名’)

 

『自分で処理した範疇』とは、テーブル1にインサートしたが、テーブル1にはトリガーが付いていて、同時にテーブル2にインサートすることがあるとします。この場合、テーブル2のIDENTITY の値を取得するということです。ストアドプロシージャなどで、確実に自分で処理したIDENTITY の値を取得したい場合は、テーブルにインサートした直後にセッション、スコープが限定された『SCOPE_IDENTITY()』を使うのを推奨します。

コメント

タイトルとURLをコピーしました