Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisez @@IDENTITY pour renvoyer la dernière valeur d'identité insérée dans SQL Server

Dans SQL Server, vous pouvez utiliser le T-SQL @@IDENTITY fonction système pour renvoyer la dernière valeur d'identité insérée dans la session en cours.

Notez qu'il renvoie la dernière valeur d'identité générée dans any table dans la session en cours . Ceci est en contraste avec le IDENT_CURRENT() fonction, qui renvoie la dernière valeur d'identité insérée pour une table donnée .

Le SCOPE_IDENTITY() la fonction est très similaire à @@IDENTITY en ce qu' il renvoie également la dernière valeur d'identité insérée dans la session en cours. La différence est que SCOPE_IDENTITY() est limité à la portée actuelle.

Exemple 1

Voici un exemple de code de base de @@IDENTITY utilisation.

SELECT @@IDENTITY AS [Dernière valeur d'identité insérée] ;

Résultat :

+---------------------------------------------+| Dernière valeur d'identité insérée ||---------------------------------------------|| NULL |+--------------------------------+

La raison pour laquelle cela renvoie NULL c'est parce que j'ai ouvert une nouvelle session sur SQL Server et que je n'ai pas encore mis à jour une colonne d'identité pendant ma session en cours.

Vous trouverez ci-dessous un code qui effectue certaines mises à jour de la colonne d'identité.

CREATE TABLE Cats(id int IDENTITY);CREATE TABLE Dogs(id int IDENTITY);INSERT Cats DEFAULT VALUES;INSERT Cats DEFAULT VALUES;SELECT @@IDENTITY AS [Dernière valeur d'identité insérée];

Résultat :

+---------------------------------------------+| Dernière valeur d'identité insérée ||---------------------------------------------|| 2 |+--------------------------------+

Ici, je crée quelques tables, j'insère des données, puis je sélectionne la valeur d'identité actuelle.

La valeur d'identité actuelle est 2 car j'ai inséré deux lignes dans cette table.

Insérons maintenant une ligne dans l'autre tableau :

INSERT Dogs DEFAULT VALUES ;SELECT @@IDENTITY AS [Dernière valeur d'identité insérée] ;

Résultat :

+---------------------------------------------+| Dernière valeur d'identité insérée ||---------------------------------------------|| 1 |+--------------------------------+

La valeur renvoyée est 1, car il s'agit de la dernière valeur d'identité insérée pour cette session.

Exemple 2 - Comparé à IDENT_CURRENT()

Ici, il est comparé à IDENT_CURRENT() .

SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')] ;

Résultat :

+--------------+-------------------------+----- --------------------+| @@IDENTITÉ | IDENT_CURRENT('Chats') | IDENT_CURRENT('Chiens') ||--------------+-------------------------+- ------------------------|| 1 | 2 | 1 |+-------------+-------------------------+------ -------------------+

Comme mentionné, IDENT_CURRENT() renvoie son résultat en fonction de la table spécifiée. Par conséquent, nous pouvons l'utiliser pour trouver les dernières valeurs d'identité pour chaque table.

Exemple 3 – Passer à une nouvelle session

Maintenant, si j'ouvre une nouvelle connexion et sélectionne @@IDENTITY encore une fois, voici ce qui se passe :

USE Test ;SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')] ; 

Résultat :

+--------------+-------------------------+----- --------------------+| @@IDENTITÉ | IDENT_CURRENT('Chats') | IDENT_CURRENT('Chiens') ||--------------+-------------------------+- ------------------------|| NUL | 2 | 1 |+-------------+-------------------------+------ -------------------+

Le @@IDENTITY result est NULL parce que je n'ai rien inséré dans une colonne d'identité dans la nouvelle session.

Le IDENT_CURRENT() les résultats ne sont pas NULL, car son résultat est basé sur la table et non sur la session.

@@IDENTITY contre SCOPE_IDENTITY() contre IDENT_CURRENT()

Voir IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY dans SQL Server :Quelle est la différence ? pour un exemple simple qui décrit les différences entre ces trois fonctions.