Maison >base de données >tutoriel mysql >Quelles sont les différences entre `SCOPE_IDENTITY()`, `IDENTITY()`, `@@IDENTITY` et `IDENT_CURRENT()` dans SQL Server ?
SCOPE_IDENTITY()
, IDENTITY()
, @@IDENTITY
et IDENT_CURRENT()
dans SQL ServerSCOPE_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
@@IDENTITY
Ré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.
@@IDENTITY
Utile 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!