@@IDENTITY (Transact-SQL)@@IDENTITY (Transact-SQL)

S’APPLIQUE À : ouiSQL Server (à partir de 2008) ouiAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Fonction système qui retourne la dernière valeur d'identité insérée.Is a system function that returns the last-inserted identity value.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

@@IDENTITY  

Types de retourReturn Types

numeric(38,0)numeric(38,0)

Notes Remarks

À la fin d’une instruction INSERT, SELECT INTO ou de copie par bloc, @@IDENTITY contient la dernière valeur d’identité générée par l’instruction.After an INSERT, SELECT INTO, or bulk copy statement is completed, @@IDENTITY contains the last identity value that is generated by the statement. Si l’instruction n’a affecté aucune table contenant des colonnes d’identité, @@IDENTITY retourne la valeur NULL.If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. Si plusieurs lignes ont été insérées, générant ainsi plusieurs valeurs d’identité, @@IDENTITY retourne la dernière valeur d’identité générée.If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. Si l’instruction active un ou plusieurs déclencheurs chargés d’effectuer des instructions INSERT qui génèrent des valeurs d’identité, l’appel de @@IDENTITY immédiatement après l’instruction retourne la dernière valeur d’identité générée par les déclencheurs.If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. Si un déclencheur est activé après une action d’insertion sur une table dotée d’une colonne d’identité et qu’il effectue une opération d’insertion dans une autre table dépourvue d’une colonne d’identité, @@IDENTITY retourne la valeur d’identité de la première insertion.If a trigger is fired after an insert action on a table that has an identity column, and the trigger inserts into another table that does not have an identity column, @@IDENTITY returns the identity value of the first insert. La valeur @@IDENTITY ne revient pas à une valeur précédente en cas d’échec de l’instruction INSERT ou SELECT INTO, d’échec d’une copie par bloc ou d’une restauration de la transaction.The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

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é.Failed statements and transactions can change the current identity for a table and create gaps in the identity column values. 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.The identity value is never rolled back even though the transaction that tried to insert the value into the table is not committed. Par exemple, si une instruction INSERT échoue à cause d'une violation d'identité IGNORE_DUP_KEY, la valeur d'identité actuelle de la table augmente quand même d'une unité.For example, if an INSERT statement fails because of an IGNORE_DUP_KEY violation, the current identity value for the table is still incremented.

@@IDENTITY, SCOPE_IDENTITY et IDENT_CURRENT sont des fonctions similaires car elles retournent toutes la dernière valeur insérée dans la colonne IDENTITY d’une table.@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions because they all return the last value inserted into the IDENTITY column of a table.

@@IDENTITY et SCOPE_IDENTITY retournent la dernière valeur d’identité générée dans une table au cours de la session en cours.@@IDENTITY and SCOPE_IDENTITY return the last identity value generated in any table in the current session. Toutefois, SCOPE_IDENTITY retourne uniquement la valeur à l’intérieur de l’étendue actuelle ; @@IDENTITY n’est pas limitée à une étendue spécifique.However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT n'est pas limitée par l'étendue et par la session ; elle est limitée à une table spécifiée.IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT retourne la valeur d'identité générée pour une table spécifique dans n'importe quelle session et dans n'importe quelle portée.IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. Pour plus d’informations, consultez IDENT_CURRENT (Transact-SQL).For more information, see IDENT_CURRENT (Transact-SQL).

L’étendue de la fonction @@IDENTITY correspond à la session en cours sur le serveur local où elle est exécutée.The scope of the @@IDENTITY function is current session on the local server on which it is executed. Cette fonction est inapplicable aux serveurs distants ou liés.This function cannot be applied to remote or linked servers. 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.To obtain an identity value on a different server, execute a stored procedure on that remote or linked server and have that stored procedure (which is executing in the context of the remote or linked server) gather the identity value and return it to the calling connection on the local server.

La réplication peut affecter la valeur @@IDENTITY car elle est utilisée dans les déclencheurs de réplication et les procédures stockées.Replication may affect the @@IDENTITY value, since it is used within the replication triggers and stored procedures. @@IDENTITY n’est pas un indicateur fiable de l’identité créée par l’utilisateur la plus récente si la colonne fait partie d’un article de réplication.@@IDENTITY is not a reliable indicator of the most recent user-created identity if the column is part of a replication article. Vous pouvez utiliser la syntaxe de la fonction SCOPE_IDENTITY() à la place de @@IDENTITY.You can use the SCOPE_IDENTITY() function syntax instead of @@IDENTITY. Pour plus d’informations, consultez SCOPE_IDENTITY (Transact-SQL)For more information, see SCOPE_IDENTITY (Transact-SQL)

Note

La procédure stockée ou l’instruction Transact-SQLTransact-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.The calling stored procedure or Transact-SQLTransact-SQL statement must be rewritten to use the SCOPE_IDENTITY() function, which returns the latest identity used within the scope of that user statement, and not the identity within the scope of the nested trigger used by replication.

ExemplesExamples

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.The following example inserts a row into a table with an identity column (LocationID) and uses @@IDENTITY to display the identity value used in the new row.

USE AdventureWorks2012;  
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  

Voir aussiSee Also

Fonctions système (Transact-SQL) System Functions (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
IDENT_CURRENT (Transact-SQL) IDENT_CURRENT (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL) SCOPE_IDENTITY (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)