SQL Server ID 管理: 適切な関数の選択 (@@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT()、OUTPUT)
多くのデータベース アプリケーションでは、特に ID 列を含むテーブルを扱う場合、新しく挿入された行の ID にアクセスする必要があります。 SQL Server はこれを実現するいくつかの方法を提供します。各方法には特定の用途と潜在的な欠点があります。
@@IDENTITY: セッション全体の ID 取得
@@IDENTITY
は、テーブルやスコープに関係なく、現在のセッションで生成された最後の ID 値を取得します。 注意が必要です: @@IDENTITY
は他のスコープ (トリガーなど) から値を返す可能性があり、不正確な結果が生じる可能性があります。
SCOPE_IDENTITY(): スコープ固有の ID 取得
SCOPE_IDENTITY()
は、より正確なアプローチを提供し、現在のセッションおよびスコープ (通常は現在のデータベース) 内で生成された最後の ID 値を返します。 その信頼性により、ほとんどのシナリオで推奨される方法になります。 (n)
構文を使用すると、スコープをさらに絞り込むことができます。
IDENT_CURRENT(): テーブル固有の ID の取得
IDENT_CURRENT('tableName')
は、セッションやスコープに関係なく、指定されたテーブルに対して生成された最後の ID 値を取得します。これは、現在のセッションで変更されていないテーブルから ID 値にアクセスする場合、または @@IDENTITY
と SCOPE_IDENTITY()
が不適切な場合に役立ちます。
OUTPUT 句: ステートメントレベルの ID 取得
OUTPUT
ステートメント内の INSERT
句は、ステートメントのスコープ内で挿入された行の ID に直接アクセスする方法を提供します。 @@IDENTITY
とは異なり、スコープ間の問題を回避します。 ただし、出力を保存するためにテーブル変数または一時テーブルを使用する必要があるため、複雑さが増し、パフォーマンスに影響を与える可能性があります。 重要なのは、これが並列実行で ID を取得する唯一の保証された方法であるということです。
正しい ID 取得方法の選択は、特定のアプリケーションのニーズによって異なります。一般的には SCOPE_IDENTITY()
が推奨されますが、@@IDENTITY
、IDENT_CURRENT()
、および OUTPUT
句は、特定のコンテキストで価値のある代替手段を提供します。
以上が適切な SQL Server ID 取得関数を選択する方法: @@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT()、または OUTPUT?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。