Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base 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,
@@IDENTITYretourneNULL. - Si plusieurs lignes sont insérées, générant plusieurs valeurs identités,
@@IDENTITYcela 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
@@IDENTITYimmé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
@@IDENTITYrenvoie la valeur identité de la première insertion. La@@IDENTITYvaleur ne revient pas à un paramètre précédent si l’instructionINSERTorSELECT INTOou 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.
@@IDENTITYetSCOPE_IDENTITYretourner la dernière valeur d’identité générée dans n’importe quelle table de la session en cours. Cependant,SCOPE_IDENTITYne renvoie la valeur que dans le champ actuel ;@@IDENTITYn’est pas limité à un champ spécifique.IDENT_CURRENTn’est pas limité par la portée et la session ; il est limité à une table spécifiée.IDENT_CURRENTrenvoie 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