DBCC CHECKIDENT (Transact-SQL)

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

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

  • table_name
    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 des tables doivent respecter les conventions applicables aux identificateurs.

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

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

  • new_reseed_value
    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 )

ou

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 valeur d'identité. Dans le cas contraire, la ligne suivante insérée utilise la valeur new_reseed_value + la valeur incrémentielle actuelle.

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 redéfinir 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 de la colonne, puis spécifiez cette valeur comme new_reseed_value dans une commande DBCC CHECKIDENT (table_name, RESEED, new_reseed_value).

ou

  • Exécutez DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) avec la valeur new_reseed_value définie à un niveau très bas, puis exécutez la commande 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) en attribuant à new_reseed_value la valeur de départ souhaitée.

Modification de la valeur de départ

La valeur de départ est la valeur insérée dans une colonne d'identité pour la toute 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 effectuer les tâches suivantes :

  • modifier la valeur de départ d'origine qui a été 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 remplacer la valeur de départ d'origine dans des lignes existantes, vous devez supprimer la colonne d'identité et la recréer 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.

Ensembles de résultats

Que les options soient spécifiées ou non pour une table qui contient une colonne d'identité, DBCC CHECKIDENT retourne le message suivant pour toutes les opérations, sauf si une nouvelle valeur de départ est spécifiée.

Checking identity information: current identity value '<current identity value>', current column value '<current column value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

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

Checking identity information: current identity value '<current identity value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorisations

L'appelant doit être propriétaire de la table ou être membre du rôle serveur fixe sysadmin ou du rôle de base de données fixe db_owner ou db_ddladmin.

Exemples

A.Redéfinition de la valeur d'identité courante, 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 AdventureWorks2012 .

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

B.Présentation de la valeur d'identité courante

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

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

C.Attribution forcée d’une nouvelle valeur pour la valeur d’identité actuelle

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 contient déjà des lignes, la ligne suivante insérée utilise la valeur 11, autrement dit, la nouvelle valeur d'incrément actuelle définie pour la colonne, plus 1.

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

Voir aussi

Référence

ALTER TABLE (Transact-SQL)

CREATE TABLE (Transact-SQL)

DBCC (Transact-SQL)

IDENTITY (Propriété) (Transact-SQL)

USE (Transact-SQL)

IDENT_SEED (Transact-SQL)

IDENT_INCR (Transact-SQL)

Concepts

Répliquer des colonnes d'identité