最後にインサートされた IDENTITY の値を取得する関数には次の3つです。
- @@IDENTITY
- SCOPE_IDENTITY()
- IDENT_CURRENT(‘テーブル名’)
それぞれ下記の特徴があります。
セッション | スコープ | |
@@IDENTITY | 現在のセッション | 関係ない |
SCOPE_IDENTITY() | 現在のセッション | 現在のスコープ |
IDENT_CURRENT(‘テーブル名’) | 関係ない | 関係ない |
用途に分けて使い分けます。
現在の処理中でテーブル関係なく、トリガーを含め最後に使ったIDENTITY の値を取得したい。
@@IDENTITY
現在の処理内でテーブル関係なく、自分で処理した範疇で最後に使ったIDENTITY の値を取得したい。
SCOPE_IDENTITY()
現在の処理、自分で処理した範疇関係なく、指定したテーブルに対して最後に使ったIDENTITY の値を取得したい。
IDENT_CURRENT(‘テーブル名’)
『自分で処理した範疇』とは、テーブル1にインサートしたが、テーブル1にはトリガーが付いていて、同時にテーブル2にインサートすることがあるとします。この場合、テーブル2のIDENTITY の値を取得するということです。ストアドプロシージャなどで、確実に自分で処理したIDENTITY の値を取得したい場合は、テーブルにインサートした直後にセッション、スコープが限定された『SCOPE_IDENTITY()』を使うのを推奨します。
コメント