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

Utilisez IDENT_CURRENT() pour renvoyer la valeur d'identité actuelle sur une colonne d'identité dans SQL Server

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.