IDENT_CURRENT (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

La IDENT_CURRENT fonction système renvoie la dernière valeur d’identité générée pour une table ou une vue spécifiée. La dernière valeur d'identité générée peut être pour toute session et toute étendue.

Conventions de la syntaxe Transact-SQL

Syntaxe

IDENT_CURRENT( 'table_or_view' )

Arguments

table_or_view

Le nom de la table ou de la vue dont la valeur d’identité est retournée. table_or_view est de type varchar, sans valeur par défaut.

Types de retour

numeric(@@MAXPRECISION,0))

Exceptions

Retourne NULL une erreur ou si un appelant n’a pas l’autorisation d’afficher l’objet.

Dans SQL Server, un utilisateur peut voir uniquement les métadonnées des éléments sécurisables qui lui appartiennent ou pour lesquels il dispose d'un droit d'accès. Cela signifie que des fonctions intégrées émettrices de métadonnées, telles que , IDENT_CURRENT peuvent revenir NULL si l’utilisateur n’a aucune permission sur l’objet. Pour plus d'informations, consultez Metadata Visibility Configuration.

Remarques

IDENT_CURRENTest similaire aux fonctions SCOPE_IDENTITY d’identité de SQL Server 2000 (8.x) et @@IDENTITY. Ces trois fonctions renvoient les dernières valeurs d'identité générées. Toutefois, l’étendue et la session dans lesquelles le paramètre last est défini diffèrent pour chacune de ces fonctions :

  • IDENT_CURRENT renvoie la dernière valeur d’identité générée pour une table spécifique dans une session et un champ de regroupement donnés.
  • @@IDENTITY renvoie la dernière valeur d’identité générée pour n’importe quelle table de la session en cours, sur tous les champs de contrôle.
  • SCOPE_IDENTITY renvoie la dernière valeur d’identité générée pour toute table de la session en cours ainsi que le périmètre actuel.

Lorsque la IDENT_CURRENT valeur est NULL (parce que la table n’a jamais contenu de lignes ou a été tronquée), la IDENT_CURRENT fonction retourne la valeur de la graine.

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 INSERT instruction échoue en raison d’une IGNORE_DUP_KEY violation, la valeur d’identité actuelle de la table est toujours incrémentée.

Lorsqu’on utilise IDENT_CURRENT sur une vue contenant des jointures, NULL est retourné. Ceci est valable indépendamment du fait qu’une seule ou plusieurs tables jointes aient une colonne d’identité.

Important

Faites preuve de prudence lors de l’utilisation IDENT_CURRENT pour prédire la prochaine valeur d’identité générée. La valeur réelle générée peut différer de IDENT_CURRENT plus IDENT_INCR en raison des insertions effectuées par d’autres sessions.

La IDENT_CURRENT fonction n’est pas disponible pour les colonnes d’identité dans Fabric Data Warehouse.

Exemples

R. Retourner la dernière valeur d’identité générée pour une table spécifiée

L'exemple suivant renvoie la dernière valeur d'identité générée pour la table Person.Address de la base de données AdventureWorks2025.

USE AdventureWorks2022;  
GO  
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;  
GO  

B. Comparez les valeurs d’identité retournées par IDENT_CURRENT, @@IDENTITY et SCOPE_IDENTITY

L'exemple suivant affiche les valeurs d'identité différentes renvoyées par IDENT_CURRENT, @@IDENTITY et SCOPE_IDENTITY.

USE AdventureWorks2022;  
GO  
IF OBJECT_ID(N't6', N'U') IS NOT NULL   
    DROP TABLE t6;  
GO  
IF OBJECT_ID(N't7', N'U') IS NOT NULL   
    DROP TABLE t7;  
GO  
CREATE TABLE t6(id INT IDENTITY);  
CREATE TABLE t7(id INT IDENTITY(100,1));  
GO  
CREATE TRIGGER t6ins ON t6 FOR INSERT   
AS  
BEGIN  
   INSERT t7 DEFAULT VALUES  
END;  
GO  
--End of trigger definition  

SELECT id FROM t6;  
--IDs empty.  

SELECT id FROM t7;  
--ID is empty.  

--Do the following in Session 1  
INSERT t6 DEFAULT VALUES;  
SELECT @@IDENTITY;  
/*Returns the value 100. This was inserted by the trigger.*/  

SELECT SCOPE_IDENTITY();  
/* Returns the value 1. This was inserted by the   
INSERT statement two statements before this query.*/  

SELECT IDENT_CURRENT('t7');  
/* Returns value inserted into t7, that is in the trigger.*/  

SELECT IDENT_CURRENT('t6');  
/* Returns value inserted into t6. This was the INSERT statement four statements before this query.*/  

-- Do the following in Session 2.  
SELECT @@IDENTITY;  
/* Returns NULL because there has been no INSERT action   
up to this point in this session.*/  

SELECT SCOPE_IDENTITY();  
/* Returns NULL because there has been no INSERT action   
up to this point in this scope in this session.*/  

SELECT IDENT_CURRENT('t7');  
/* Returns the last value inserted into t7.*/