ホームページ >データベース >mysql チュートリアル >SQL Server の `@@IDENTITY`、`SCOPE_IDENTITY()`、`IDENT_CURRENT()`、および `IDENTITY()` の違いは何ですか?
SQL Server ID 関数: 詳細な比較
@@IDENTITY
、SCOPE_IDENTITY()
、IDENT_CURRENT()
、および IDENTITY()
はすべて、SQL Server の ID 列からの値の取得に関連していますが、スコープとアプリケーションが大きく異なります。
SQL Server ID 関数のスコープについて
「スコープ」とは、ID 値が生成されるコンテキストを指します。 これは次のとおりです:
機能の内訳
@@IDENTITY
: スコープ (クエリ、ストアド プロシージャ、またはトリガー) に関係なく、現在のセッション で生成された最後の ID 値を返します。
SCOPE_IDENTITY()
: 現在のセッションとスコープ内で生成された最後の ID 値を返します。これは、より正確な結果が得られるため、最も一般的に推奨される関数です。
IDENT_CURRENT('table_name')
: セッションやスコープに関係なく、特定のテーブルに対して生成された最後の ID 値を返します。 これは、異なるセッションまたはコンテキストにわたって特定のテーブルの最後の ID 値が必要な場合に便利です。
IDENTITY()
: これは ID 値の取得には使用されません。 これは、SELECT ... INTO
構文を使用してテーブルを作成するときに ID 列を定義するために使用されるキーワードです。
シナリオ例
さまざまなシナリオを検討して違いを強調してみましょう:
単一の INSERT
ステートメント: 単一の INSERT
ステートメントで行を追加すると、SCOPE_IDENTITY()
と @@IDENTITY
は同じ値を返します。
トリガーベースの挿入: トリガーが最初のテーブルに INSERT
を挿入した後に 2 番目のテーブルに行を挿入する場合、SCOPE_IDENTITY()
は現在のステートメントによって直接影響を受けるテーブルから ID を返します。 (最初のテーブル)、@@IDENTITY
はセッションで最後に影響を受けたテーブル (2 番目のテーブルである可能性があります) から ID を返します。
適切な機能の選択
ほとんどの場合、コンテキスト固有の結果が得られるため、SCOPE_IDENTITY()
が推奨されます。 @@IDENTITY
は、セッション内での発信元に関係なく、最新の ID 値が必要な場合に役立ちます。 IDENT_CURRENT()
は、現在のセッションに関係なく、特定のテーブルの最後の ID 値が必要な場合に重要です。 IDENTITY()
は ID 列を定義するためのものであり、その値を取得するためのものではないことに注意してください。
以上がSQL Server の `@@IDENTITY`、`SCOPE_IDENTITY()`、`IDENT_CURRENT()`、および `IDENTITY()` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。