IDENT_CURRENT は、SQL Server 2000 の ID 関数 SCOPE_IDENTITY および @@IDENTITY に似ています。3 つの関数とも、最後に生成された ID 値を返します。ただし、各関数の中で、最後が定義されるスコープとセッションがそれぞれ異なります。
-
IDENT_CURRENT は、任意のセッションおよび任意のスコープ内の特定のテーブルに対して生成された最後の ID 値を返します。
-
@@IDENTITY は、すべてのスコープを対象に、現在のセッション内の任意のテーブルに対して生成された最後の ID 値を返します。
-
SCOPE_IDENTITY は、現在のセッションと現在のスコープ内の任意のテーブルに対して生成された最後の ID 値を返します。
IDENT_CURRENT 値が NULL の場合 (テーブルに行が格納されたことがないか、テーブルで切り捨てが行われたため)、IDENT_CURRENT 関数はシード値を返します。
失敗したステートメントやトランザクションにより、テーブルの現在の ID が変更され、ID 列の値にギャップが生じることがあります。ID 値がロールバックされることはありません。これは、テーブルに値を挿入するトランザクションがコミットされない場合でも同じです。たとえば、IGNORE_DUP_KEY 違反によって INSERT ステートメントが失敗した場合でも、テーブルの現在の ID 値は増分されます。
次に生成される ID 値の予測に IDENT_CURRENT を使用する場合は注意してください。実際に生成される値は、他のセッションで実行される挿入操作が原因で、IDENT_CURRENT と IDENTITY_SEED の合計値とは異なる可能性があります。