Partager via


@@IDENTITY (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

@@IDENTITY est une fonction système qui renvoie la dernière valeur d’identité insérée.

Conventions de la syntaxe Transact-SQL

Syntaxe

@@IDENTITY  

Types de retour

numeric(38,0)

Remarques

Après qu’une INSERTinstruction , SELECT INTO, ou une instruction de copie en bloc est complétée, @@IDENTITY contient la dernière valeur identité générée par l’énoncé.

  • Si l’instruction n’a affecté aucune table avec des colonnes identités, @@IDENTITY retourne NULL.
  • Si plusieurs lignes sont insérées, générant plusieurs valeurs identités, @@IDENTITY cela retourne la dernière valeur identité générée.
  • Si l’instruction déclenche un ou plusieurs déclencheurs qui effectuent des inserts générant des valeurs d’identité, appeler @@IDENTITY immédiatement après l’instruction retourne la dernière valeur d’identité générée par les déclencheurs.
  • Si un déclencheur est déclenché après une action d’insertion sur une table qui possède une colonne identité, et que le déclencheur s’insère dans une autre table qui n’a pas de colonne identité, cela @@IDENTITY renvoie la valeur identité de la première insertion. La @@IDENTITY valeur ne revient pas à un paramètre précédent si l’instruction INSERT or SELECT INTO ou la copie en bloc échoue, ou si la transaction est annulée.

Les instructions et les transactions en échec peuvent modifier l'identité actuelle d'une table et créer des trous dans les valeurs des colonnes d'identité. La valeur d'identité n'est jamais annulée, même si la transaction qui a essayé d'insérer la valeur dans la table n'est pas validée. Par exemple, si une instruction INSERT échoue à cause d’une IGNORE_DUP_KEY violation, la valeur d’identité actuelle de la table est toujours incrémentée.

@@IDENTITY, SCOPE_IDENTITY, et IDENT_CURRENT sont des fonctions similaires car elles retournent toutes la dernière valeur insérée dans la IDENTITY colonne d’un tableau.

  • @@IDENTITY et SCOPE_IDENTITY retourner la dernière valeur d’identité générée dans n’importe quelle table de la session en cours. Cependant, SCOPE_IDENTITY ne renvoie la valeur que dans le champ actuel ; @@IDENTITY n’est pas limité à un champ spécifique.

  • IDENT_CURRENT n’est pas limité par la portée et la session ; il est limité à une table spécifiée. IDENT_CURRENT renvoie la valeur d’identité générée pour une table spécifique dans toute session et dans n’importe quel champ de contrôle. Pour plus d’informations, consultez IDENT_CURRENT (Transact-SQL).

Le champ d’application de la @@IDENTITY fonction correspond à la session courante sur le serveur local sur lequel elle est exécutée. Cette fonction est inapplicable aux serveurs distants ou liés. Pour obtenir une valeur d'identité sur un autre serveur, exécutez une procédure stockée sur ce serveur distant ou lié puis faites en sorte que celle-ci, en cours d'exécution dans le contexte du serveur distant ou lié, collecte la valeur d'identité et la retourne à la connexion appelante sur le serveur local.

La réplication peut affecter la @@IDENTITY valeur, puisqu’elle est utilisée dans les déclencheurs de réplication et les procédures stockées. @@IDENTITY n’est pas un indicateur fiable de l’identité la plus récente créée par l’utilisateur si la colonne fait partie d’un article de réplication. Vous pouvez utiliser la syntaxe SCOPE_IDENTITY() des fonctions à la place de @@IDENTITY. Pour plus d’informations, consultez SCOPE_IDENTITY (Transact-SQL)

Notes

La procédure stockée ou l’instruction Transact-SQL appelante doit être réécrite pour utiliser la fonction SCOPE_IDENTITY() qui retourne l’identité la plus récente utilisée dans l’étendue de cette instruction utilisateur, et non l’identité dans l’étendue du déclencheur imbriqué utilisée par la réplication.

Exemples

L'exemple suivant insère une ligne dans une table dotée d'une colonne d'identité (LocationID) et utilise @@IDENTITY pour afficher la valeur d'identité utilisée dans la nouvelle ligne.

USE AdventureWorks2022;  
GO  
--Display the value of LocationID in the last row in the table.  
SELECT MAX(LocationID) FROM Production.Location;  
GO  
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)  
VALUES ('Damaged Goods', 5, 2.5, GETDATE());  
GO  
SELECT @@IDENTITY AS 'Identity';  
GO  
--Display the value of LocationID of the newly inserted row.  
SELECT MAX(LocationID) FROM Production.Location;  
GO