SQL Server ID 値の取得方法: 総合ガイド
ID 列を含む SQL Server テーブルを操作する場合、挿入操作後に新しく生成された ID 値を取得することが重要です。 このガイドでは、この目的で使用できるさまざまな関数とテクニック、@@IDENTITY
、IDENT_CURRENT
、SCOPE_IDENTITY()
、および OUTPUT
句について説明します。
オプションを理解する
各方法は、異なるレベルの範囲と信頼性を提供します。
@@IDENTITY
: この関数は、特定のテーブルやステートメントに関係なく、現在のセッション内で生成された最後の ID 値を返します。 使い方は簡単ですが、範囲が広いため、同じセッション内で複数の挿入が発生した場合にエラーが発生しやすくなります。 慎重に使用してください。
IDENT_CURRENT('tableName')
: この関数は、特定のテーブル (tableName
) を具体的にターゲットにし、すべてのセッションとスコープにわたってそのテーブルに対して生成された最後の ID 値を取得します。使用頻度はそれほど高くありませんが、@@IDENTITY
よりも高度な特異性を提供します。
SCOPE_IDENTITY()
: 通常、これが推奨される方法です。現在のセッションおよび現在のスコープ (通常は現在のバッチまたはストアド プロシージャ) 内で生成された最後の ID 値を返します。これにより、@@IDENTITY
と比較して分離性と精度が向上します。
OUTPUT
句: OUTPUT
ステートメントとともに使用される INSERT
句は、挿入されたすべての行の ID 値を取得するための強力で信頼性の高い方法を提供します。 挿入された行は一時テーブルまたはテーブル変数に書き込まれるため、ID 値を直接クエリできるようになります。これは、並列実行プランを扱う場合に特に有益です。 ただし、OUTPUT
句はトリガーの 前 に実行されます。つまり、トリガーによって生成された ID 値は反映されないことに注意してください。
適切な方法の選択
ほとんどのシナリオでは、SCOPE_IDENTITY()
はシンプルさと信頼性の最適なバランスを提供します。 @@IDENTITY
は、より広い範囲が明示的に必要でない限り、使用しないでください。 IDENT_CURRENT('tableName')
は、必要に応じてより具体的なアプローチを提供します。OUTPUT
句は、特に複雑なシナリオや並列処理で作業する場合、その堅牢性の点で価値があります。 最終的には、アプリケーションの特定の要件と同時操作の可能性によって選択が決まります。
以上がSQL Server で新しく生成された ID 値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。