ホームページ >データベース >mysql チュートリアル >SQL Server の「SCOPE_IDENTITY()」、「IDENTITY()」、「@@IDENTITY」、「IDENT_CURRENT()」の違いは何ですか?
SCOPE_IDENTITY()
、IDENTITY()
、@@IDENTITY
、IDENT_CURRENT()
関数についての深い理解SCOPE_IDENTITY()
、IDENTITY()
、@@IDENTITY
、IDENT_CURRENT()
はすべて SQL Server で自動インクリメント列の値を取得するために使用されますが、その用途は異なります。それらの違いを詳しく見てみましょう。
SCOPE_IDENTITY()
SCOPE_IDENTITY()
現在のスコープ (現在のステートメントまたはバッチ) 内で最後に挿入された自動インクリメント列の値を取得します。同じセッション内の他のスコープで生成された列値の自動インクリメントは考慮されません。
IDENTITY()
名前に反して、IDENTITY()
は自動インクリメントされる列値の取得には使用されません。これは、別のテーブルのデータから新しいテーブルを導出するときに自動インクリメント列を作成するために SELECT...INTO
ステートメントで使用されます。
@@IDENTITY
@@IDENTITY
スコープに関係なく、現在のセッションで最後に挿入された自動インクリメント列の値を取得します。これは、同じセッション中に現在のスコープと他のスコープで生成された自動インクリメント列値が含まれることを意味します。
IDENT_CURRENT()
IDENT_CURRENT()
は、セッション間でも、特定のテーブルまたはビューに最後に挿入された自動インクリメント列の値を取得するように設計された関数で、あまり使用されていません。
各機能はいつ使用するのですか?
一般的には、現在のスコープ内で分離を提供するため、SCOPE_IDENTITY()
が推奨されます。同じスコープ内の親ステートメントまたはストアド プロシージャで生成された自動インクリメント列値を参照する必要がある場合、SCOPE_IDENTITY()
によってその正確性が保証されます。
@@IDENTITY
セッション内の他のスコープで生成された自動インクリメント列の値にアクセスする場合に便利です。たとえば、同じセッションで複数の操作が発生する場合、トリガーまたはバッチ ジョブでこれを使用できます。
IDENT_CURRENT()
は主に、異なるデータ ソースからデータを接続する場合など、複数のセッションにわたって特定のテーブルの自動インクリメント列値にアクセスする必要があるシナリオで使用されます。
例:
次のコード スニペットを考えてみましょう:
<code class="language-sql">-- 向'Customers'表插入一条记录 INSERT INTO Customers (Name) VALUES ('John Doe'); -- 检索当前语句中生成的自增列值 SELECT SCOPE_IDENTITY(); -- 触发器触发并插入另一条记录 CREATE TRIGGER InsertAudit ON Customers AFTER INSERT AS INSERT INTO AuditLog (CustomerId, Action) VALUES (@@IDENTITY, 'INSERT'); -- 检索触发器生成的自增列值 SELECT @@IDENTITY;</code>
この例では、SCOPE_IDENTITY()
は「Customers」テーブルに挿入されたレコードの自動インクリメント列の値を返しますが、@@IDENTITY
は監査ログ エントリの後にトリガーによって作成された自動インクリメント列の値を返します。が挿入されます。これは、@@IDENTITY
を使用してスコープが異なるとどのように結果が異なるかを示しています。
以上がSQL Server の「SCOPE_IDENTITY()」、「IDENTITY()」、「@@IDENTITY」、「IDENT_CURRENT()」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。