Maison >base de données >tutoriel mysql >Quelles sont les différences entre `SCOPE_IDENTITY()`, `IDENTITY()`, `@@IDENTITY` et `IDENT_CURRENT()` dans SQL Server ?

Quelles sont les différences entre `SCOPE_IDENTITY()`, `IDENTITY()`, `@@IDENTITY` et `IDENT_CURRENT()` dans SQL Server ?

DDD
DDDoriginal
2025-01-20 12:46:09426parcourir

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

Compréhension approfondie des fonctions SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY et IDENT_CURRENT() dans SQL Server

Les quatre fonctions

SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY et IDENT_CURRENT() sont toutes utilisées pour récupérer les valeurs de colonnes à incrémentation automatique dans SQL Server, mais leurs utilisations sont différentes. Plongeons dans leurs différences.

SCOPE_IDENTITY()

SCOPE_IDENTITY()Récupérez la dernière valeur de colonne d'incrémentation automatique insérée dans la portée actuelle, qui peut être l'instruction ou le lot actuel. Il ne prend pas en compte les valeurs de colonne auto-incrémentées générées dans d'autres étendues au sein de la même session.

IDENTITY()

Contrairement au nom, IDENTITY() n'est pas utilisé pour récupérer les valeurs de colonne à incrémentation automatique. Il est utilisé dans les instructions SELECT...INTO pour créer des colonnes à incrémentation automatique lors de la dérivation d'une nouvelle table à partir des données d'une autre table.

@@IDENTITY

@@IDENTITYRécupère la dernière valeur de colonne d'auto-incrémentation insérée dans la session en cours, quelle que soit sa portée. Cela signifie qu'il inclut les valeurs de colonne à incrémentation automatique générées dans la portée actuelle et dans d'autres portées au cours de la même session.

IDENT_CURRENT()

IDENT_CURRENT() est une fonction moins utilisée conçue pour récupérer la dernière valeur de colonne à incrémentation automatique insérée dans une table ou une vue spécifique, même entre les sessions.

Quand utiliser chaque fonction ?

Généralement, SCOPE_IDENTITY() est préféré car il assure l'isolement dans le cadre actuel. Si vous devez référencer une valeur de colonne à incrémentation automatique générée dans une instruction parent ou une procédure stockée dans la même portée, SCOPE_IDENTITY() garantit son exactitude.

@@IDENTITYUtile pour accéder aux valeurs de colonne à incrémentation automatique générées dans d'autres étendues au sein de la session. Par exemple, vous pouvez l'utiliser dans un travail de déclenchement ou par lots lorsque plusieurs opérations se produisent au cours de la même session.

IDENT_CURRENT() est principalement utilisé dans les scénarios où vous devez accéder aux valeurs de colonne à incrémentation automatique dans une table spécifique sur plusieurs sessions, par exemple lors de la connexion de données provenant de différentes sources de données.

Exemple :

Considérez l'extrait de code suivant :

<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>

Dans cet exemple, SCOPE_IDENTITY() renverra la valeur de colonne à incrémentation automatique de l'enregistrement inséré dans la table "Clients", tandis que @@IDENTITY renverra la valeur de colonne à incrémentation automatique créée par le déclencheur après l'entrée du journal d'audit est inséré. Cela montre comment différentes portées peuvent conduire à des résultats différents en utilisant @@IDENTITY.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn