Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base 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_CURRENTrenvoie 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. -
@@IDENTITYrenvoie 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_IDENTITYrenvoie 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.*/