DBCC CHECKIDENT (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Vérifie la valeur d’identité actuelle pour la table spécifiée dans SQL Server et, si nécessaire, modifie cette valeur d’identité. Vous pouvez également utiliser DBCC CHECKIDENT pour définir manuellement une nouvelle valeur d'identité actuelle pour la colonne d'identité.

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server et Azure SQL Database :

DBCC CHECKIDENT
 (
    table_name
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

Syntaxe pour Azure Synapse Analytics :

DBCC CHECKIDENT
 (
    table_name
        [ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

table_name

Le nom de la table pour laquelle la valeur d'identité courante est vérifiée. La table spécifiée doit posséder une colonne d'identité. Les noms de tables doivent respecter les règles applicables aux identificateurs. Deux ou trois noms de partie doivent être délimités sous la forme Person.AddressType ou [Person].[AddressType].

NORESEED

Spécifie que la valeur d’identité courante ne doit pas être changée.

RESEED

Spécifie que la valeur d'identité courante doit être modifiée.

new_reseed_value

La nouvelle valeur à utiliser comme valeur actuelle de la colonne d'identité.

WITH NO_INFOMSGS

Supprime tous les messages d'information.

Notes

Les corrections spécifiques effectuées sur la valeur d'identité courante dépendent des spécifications de paramètres.

Commande DBCC CHECKIDENT Correction(s) d'identité effectuée(s)
DBCC CHECKIDENT (<table_name>, NORESEED) La valeur d’identité courante n’est pas redéfinie. DBCC CHECKIDENT renvoie la valeur d'identité actuelle et la valeur maximale actuelle de la colonne d'identité. Si les deux valeurs diffèrent, vous devez redéfinir la valeur d’identité afin d’éviter les erreurs ou écarts potentiels dans la séquence de valeurs.
DBCC CHECKIDENT (<table_name>)

or

DBCC CHECKIDENT (<table_name>, RESEED)
Si la valeur d'identité actuelle pour une table est inférieure à la valeur d'identité maximale stockée dans la colonne d'identité, elle est redéfinie à l'aide de cette valeur maximale dans la colonne d'identité. Consultez la section Exceptions qui suit.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) La valeur d'identité actuelle est définie comme new_reseed_value. Si aucune ligne n'a été insérée dans la table depuis sa création ou si toutes les lignes ont été supprimées à l'aide de l'instruction TRUNCATE TABLE, la première ligne insérée après l'exécution de DBCC CHECKIDENT utilise new_reseed_value comme identité. Si des lignes sont présentes dans la table ou si toutes les lignes ont été supprimées avec l’instruction DELETE, la ligne insérée suivante utilise new_reseed_value + la valeur de l’incrément actuel. Si une transaction insère une ligne et est ensuite restaurée, la prochaine ligne insérée utilise new_reseed_value + la valeur current increment comme si la ligne avait été supprimée. Si la table n’est pas vide, le fait d’attribuer à la valeur d’identité un nombre inférieur à la valeur maximale dans la colonne d’identité peut aboutir à l’une des situations suivantes :

- Si une contrainte PRIMARY KEY ou UNIQUE existe sur la colonne d’identité, les opérations d’insertion ultérieures dans la table déclenchent le message d’erreur 2627, car la valeur d’identité générée entre en conflit avec les valeurs existantes.

- Si aucune contrainte PRIMARY KEY ou UNIQUE n’existe, les opérations d’insertion ultérieures aboutissent à des valeurs d’identité dupliquées.

Exceptions

Le tableau suivant répertorie les conditions dans lesquelles DBCC CHECKIDENT ne redéfinit pas automatiquement la valeur d’identité actuelle et indique comment réinitialiser celle-ci.

Condition Méthodes de redéfinition
La valeur d'identité actuelle est supérieure à la valeur maximale de la table. Exécutez DBCC CHECKIDENT (<table_name>, NORESEED) pour déterminer la valeur maximale actuelle dans la colonne. Ensuite, spécifiez cette valeur comme new_reseed_value dans la commande DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>).

or

Exécutez DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) avec new_reseed_value défini sur une valeur basse, puis, exécutez DBCC CHECKIDENT (<table_name>, RESEED) pour corriger la valeur.
Toutes les lignes sont supprimées de la table. Exécutez DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) avec new_reseed_value défini sur une nouvelle valeur de démarrage.

Modifier la valeur seed

La valeur de départ est la valeur insérée dans une colonne d’identité pour la première ligne chargée dans la table. Tous les lignes suivantes contiennent la valeur d'identité actuelle à laquelle s'ajoute la valeur d'incrément (la valeur d'identité actuelle étant la dernière valeur d'identité générée pour la table ou la vue).

Vous ne pouvez pas utiliser DBCC CHECKIDENT pour les tâches suivantes :

  • Changer la valeur de départ d’origine spécifiée pour une colonne d’identité lors de la création de la table ou de la vue.

  • attribuer une nouvelle valeur de départ à des lignes existantes d'une table ou d'une vue.

Pour changer la valeur de départ d’origine dans des lignes existantes, supprimez la colonne d’identité et recréez-la en spécifiant la nouvelle valeur de départ. Lorsque la table contient des données, les numéros d'identité sont ajoutés aux lignes existantes avec les les valeurs de départ et d'incrément. L’ordre dans lequel les lignes sont mises à jour n’est pas garanti.

Jeux de résultats

Que vous spécifiiez ou non les options pour une table qui contient une colonne d’identité, DBCC CHECKIDENT retourne le message suivant pour toutes les opérations, sauf une. Cette opération spécifie une nouvelle valeur de départ.

Vérification des informations d'identité : valeur d'identité actuelle « <valeur d’identité actuelle> », valeur de colonne actuelle « <valeur de colonne actuelle> ». Exécution de DBCC terminée. Si DBCC a affiché des messages d'erreur, contactez l'administrateur système.

Lorsque DBCC CHECKIDENT est utilisé pour spécifier une nouvelle valeur seed à l'aide de RESEED <new_reseed_value>, le message suivant est retourné.

Vérification des informations d'identité : valeur d'identité actuelle « <valeur d’identité actuelle> ». Exécution de DBCC terminée. Si DBCC a affiché des messages d'erreur, contactez l'administrateur système.

Autorisations

L’appelant doit être propriétaire du schéma qui contient la table, ou être membre du rôle serveur fixe sysadmin, du rôle de base de données fixe db_owner ou du rôle de base de données fixe db_ddladmin.

Azure Synapse Analytics nécessite des autorisations db_owner.

Exemples

R. Rétablir la valeur d’identité actuelle, si nécessaire

Le cas échéant, l’exemple suivant redéfinit la valeur d’identité actuelle pour la table spécifiée dans la base de données AdventureWorks2022.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

B. Présenter la valeur d'identité actuelle

L’exemple suivant signale la valeur d’identité actuelle de la table spécifiée dans la base de données AdventureWorks2022 et ne corrige pas cette valeur si elle est incorrecte.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO

C. Appliquer la valeur d’identité actuelle à une nouvelle valeur

L'exemple suivant impose la valeur 10 pour la valeur d'identité actuelle dans la colonne AddressTypeID de la table AddressType. Étant donné que la table dispose de lignes, la ligne suivante insérée utilisera la valeur 11. La nouvelle valeur d’identité actuelle définie pour la colonne plus 1 (qui est la valeur d’incrément de la colonne).

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

D. Réinitialiser la valeur d’identité sur une table vide

L’exemple suivant suppose une identité de table de (1, 1) et applique la valeur d’identité actuelle dans la colonne ErrorLogID de la table ErrorLog sur une valeur de 1, après la suppression de tous les enregistrements de la table. Étant donné que la table ne contient aucune ligne, la ligne suivante insérée utilise la valeur 1, autrement dit la nouvelle valeur d’identité actuelle sans ajouter la valeur d’incrément définie pour la colonne après TRUNCATE ou sans ajouter la valeur d’incrément après DELETE.

USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO

Voir aussi