Dans SQL Server, vous pouvez utiliser le T-SQL IDENT_CURRENT()
pour renvoyer la dernière valeur d'identité générée pour une table ou une vue spécifiée sur une colonne d'identité. La dernière valeur d'identité générée peut être pour n'importe quelle session et n'importe quelle étendue.
Syntaxe
La syntaxe ressemble à ceci :
IDENT_CURRENT( 'table_or_view' )
La table_or_view argument est le nom de la table ou de la vue dont la valeur d'identité est renvoyée.
Exemple 1 - Utilisation de base
Voici un exemple de code de base.
SELECT IDENT_CURRENT('Pets') AS Result;
Résultat :
+----------+ | Result | |----------| | 3 | +----------+
Dans ce cas, la valeur d'identité actuelle est 3.
Voici une autre requête qui vérifie plus de tables.
SELECT IDENT_CURRENT('Pets') AS Pets, IDENT_CURRENT('BestFriends') AS BestFriends, IDENT_CURRENT('Cities') AS Cities;
Résultat :
+--------+---------------+----------+ | Pets | BestFriends | Cities | |--------+---------------+----------| | 3 | 121 | 180 | +--------+---------------+----------+
Exemple 2 - Inclure le schéma
Vous pouvez également inclure le schéma dans l'argument.
SELECT IDENT_CURRENT('dbo.Pets') AS Result;
Résultat :
+----------+ | Result | |----------| | 3 | +----------+
Exemple 3 - Après une insertion
Dans cet exemple, j'insère deux lignes supplémentaires dans Pets table, puis sélectionnez IDENT_CURRENT()
à nouveau.
INSERT INTO Pets (PetName) VALUES ('Brian'), ('Alf'); SELECT IDENT_CURRENT('dbo.Pets') AS Result;
Résultat :
+----------+ | Result | |----------| | 5 | +----------+
Voici à quoi ressemble le tableau :
SELECT * FROM Pets;
Résultat :
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | | 4 | Brian | | 5 | Alf | +---------+-----------+
Le PetId colonne est la colonne d'identité. Sa valeur de départ est 1 et sa valeur d'incrément est également 1.
Voir Comment utiliser la propriété IDENTITY() dans SQL Server pour le code utilisé pour créer cette table.
Exemple 4 - Vérifier toutes les tables de la base de données
Voici un exemple de vérification de toutes les tables de la base de données pour leur valeur de départ d'identité.
SELECT TABLE_SCHEMA, TABLE_NAME, IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) AS IDENT_CURRENT FROM INFORMATION_SCHEMA.TABLES WHERE IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) IS NOT NULL;
Résultat :
+----------------+----------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | IDENT_CURRENT | |----------------+----------------+-----------------| | dbo | ConstraintTest | 17 | | dbo | Event | 1 | | dbo | Scoreboard | 8 | | dbo | Pets | 5 | | dbo | BestFriends | 121 | | dbo | Cities | 180 | | dbo | Colors | 6 | | dbo | t6 | 1 | | dbo | t7 | 100 | +----------------+----------------+-----------------+
À propos de la valeur de retour
La valeur de retour pour IDENT_CURRENT()
est numeric(@@MAXPRECISION,0))
. Cela signifie qu'il s'agit d'un type de données numérique avec une précision et une échelle fixes.
La précision dépend du serveur. Le @@MAXPRECISION
L'argument renvoie le niveau utilisé par les types de données décimaux et numériques tels qu'ils sont actuellement définis sur le serveur. La précision spécifie le nombre total maximum de chiffres décimaux (cela inclut ceux situés à gauche et à droite du point décimal).
Le deuxième argument spécifie une échelle de 0
, ce qui signifie qu'il n'y a pas de chiffres décimaux à droite de la décimale.
Vous pouvez exécuter la requête suivante pour trouver le niveau de précision actuellement défini sur votre serveur :
SELECT @@MAX_PRECISION AS [Max Precision];
Voici le résultat sur mon système :
+-----------------+ | Max Precision | |-----------------| | 38 | +-----------------+
Création d'une colonne d'identité
Vous pouvez créer une colonne d'identité en utilisant le IDENTITY()
propriété dans votre CREATE TABLE
ou ALTER TABLE
déclaration.
Une autre façon de créer une colonne d'identité est le IDENTITY()
une fonction. Cela vous permet de créer une colonne d'identité lors de l'utilisation d'un SELECT INTO
déclaration pour transférer des données d'une source à une autre.
Différences avec @@IDENTITY et SCOPE_IDENTITY()
Le IDENT_CURRENT()
la fonction est similaire à @@IDENTITY
et SCOPE_IDENTITY()
, mais il y a quelques différences.
@@IDENTITY
et SCOPE_IDENTITY()
renvoie la dernière valeur d'identité générée dans any table dans la session en cours. Cependant, la différence entre ces deux fonctions est que SCOPE_IDENTITY
renvoie la valeur uniquement dans la portée actuelle, alors que @@IDENTITY
n'est pas limité à une portée spécifique.
IDENT_CURRENT()
d'autre part, n'est pas limité par la portée ou session. Au contraire, il est limité à une table spécifiée . Il renvoie la valeur d'identité générée pour une table spécifique dans n'importe quelle session et n'importe quelle portée.
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.