ホームページ > データベース > mysql チュートリアル > SQL Server の `@@IDENTITY`、`SCOPE_IDENTITY()`、`IDENT_CURRENT()`、および `IDENTITY()` の違いは何ですか?

SQL Server の `@@IDENTITY`、`SCOPE_IDENTITY()`、`IDENT_CURRENT()`、および `IDENTITY()` の違いは何ですか?

Linda Hamilton
リリース: 2025-01-20 13:04:11
オリジナル
898 人が閲覧しました

What's the Difference Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

SQL Server ID 関数: 詳細な比較

@@IDENTITYSCOPE_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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート