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

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

Linda Hamilton
リリース: 2025-01-20 12:42:11
オリジナル
499 人が閲覧しました

What are the Differences Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

SQL Server の @@IDENTITYSCOPE_IDENTITY()IDENT_CURRENT()IDENTITY() 関数についての深い理解

SQL データベース プログラミングでは、最後に挿入された ID 値を取得することが重要なタスクです。この目的のためにさまざまな関数が提供されており、それぞれに独自のニュアンスがあります。 SCOPE_IDENTITY()IDENTITY()@@IDENTITYIDENT_CURRENT() は最も一般的に使用される関数の一部ですが、これらの違いが混乱を招く可能性があります。

スコープの理解

これらの機能の違いを理解するには、「スコープ」の概念を理解することが重要です。 SQL では、スコープとは、クエリまたはコードのブロックが実行されるレベルを指します。 2 つの主なスコープがあります:

  • セッションスコープ: 単一のデータベース接続のコンテキスト。
  • クエリ スコープ: 単一のクエリまたはストアド プロシージャのコンテキスト。

機能の違い

スコープと機能に基づいて、各機能の内訳は次のとおりです。

  • @@IDENTITY: 同じセッションで作成された最後の ID 値を返します。この関数はクエリやストアド プロシージャのスコープに依存せず、通常はグローバル ID 値を取得するために使用されます。
  • SCOPE_IDENTITY(): 同じセッションおよびスコープ内で作成された最後の ID 値を返します。 @@IDENTITY とは異なり、この関数は現在のクエリまたはストアド プロシージャのコンテキストのみを考慮します。
  • IDENT_CURRENT(name): セッションやクエリのスコープに関係なく、特定のテーブルまたはビューに対して作成された最後の ID 値を返します。この関数を使用すると、さまざまなクエリやセッションにわたって ID 値を取得できます。
  • IDENTITY(): 他の 3 つの関数とは異なり、IDENTITY() は主に SELECT...INTO クエリで ID 値を生成するために使用されます。既存の ID 値は取得されません。

使用シナリオ

これらの違いを説明するために、次のシナリオを考えてみましょう:

  • 例 1: ID 列を含むレコードを挿入し、@@IDENTITY を使用してそれを取得します。
<code class="language-sql">INSERT INTO MyTable (Name) OUTPUT INSERTED.ID INTO @Identity;
PRINT @Identity;  -- 打印全局插入的标识值</code>
ログイン後にコピー
  • 例 2: MyTable にトリガーを作成して、別のテーブルにレコードを挿入し、両方のテーブルから ID 値を取得します。
<code class="language-sql">CREATE TRIGGER MyTrigger ON MyTable AFTER INSERT AS
INSERT INTO OtherTable (Name) VALUES (NEW.Name);

INSERT INTO MyTable (Name) VALUES ('Test');

SELECT @@identity AS MyIdentity;  -- 打印在MyTable中插入的标识值
SELECT scope_identity() AS TriggerIdentity;  -- 打印触发器在OtherTable中插入的标识值</code>
ログイン後にコピー

これらのシナリオでは、トリガーの関与により、@@IDENTITYSCOPE_IDENTITY() は異なる動作をします。

ベスト プラクティスの提案

ほとんどの場合、最後に作成された ID 値を取得するには、SCOPE_IDENTITY() が推奨される関数です。現在のクエリまたはストアド プロシージャ内で最も信頼性が高くコンテキストに応じた値を提供します。ただし、別のスコープまたはセッションで ID 値を取得する必要がある場合は、IDENT_CURRENT(name) がその機能を提供します。

以上がSQL Server の `@@IDENTITY`、`SCOPE_IDENTITY()`、`IDENT_CURRENT()`、および `IDENTITY()` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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