VÉRIFICATEUR DBC (Transact-SQL)

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

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é.

Cet article et sa IDENTITY syntaxe diffèrent selon les plateformes du SQL Moteur de base de données. Pour Microsoft Fabric Data Warehouse, sélectionnez Fabric Data Warehouse dans la liste déroulante des versions.

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server, Azure SQL Database, Azure SQL Managed Instance, base de données SQL dans Fabric :

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 ]

Arguments

table_name

Le nom de la table pour laquelle la valeur d'identité courante est vérifiée. Le tableau que vous spécifiez doit contenir une colonne d’identité. Les noms de tables doivent respecter les règles applicables aux identificateurs. Utilisez des délimiteurs pour les noms en deux ou trois parties, tels que 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é.

AVEC NO_INFOMSGS

Supprime tous les messages d'information.

Notes

Les corrections spécifiques qu’elles DBCC CHECKIDENT apportent à la valeur d’identité actuelle dépendent des spécifications des paramètres.

DBCC CHECKIDENT commande 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 ne sont pas identiques, réinitialisez la valeur identité pour éviter d’éventuelles erreurs ou des trous dans la séquence des valeurs.
DBCC CHECKIDENT (<table_name>)

or

DBCC CHECKIDENT (<table_name>, RESEED)
Si la valeur d’identité actuelle d’une table est inférieure à la valeur d’identité maximale stockée dans la colonne identité, elle DBCC CHECKIDENT est réinitialisée en utilisant la valeur maximale dans la colonne 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’est insérée dans la table depuis sa création, ou si toutes les lignes sont supprimées en utilisant l’instruction TRUNCATE TABLE , la première ligne insérée après l’exécution DBCC CHECKIDENT sert new_reseed_value d’identité. Si des lignes sont présentes dans le tableau, ou si toutes les lignes sont supprimées en utilisant l’instruction DELETE , la ligne suivante insérée utilise new_reseed_value + la valeur d’incrément actuelle . Si une transaction insère une ligne puis est annulée, la ligne suivante insérée utilise new_reseed_value + la valeur d’incrément actuelle 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 ou PRIMARY KEYUNIQUE existe sur la colonne identité, le message d’erreur 2627 est généré lors d’opérations d’insertion ultérieures dans la table car la valeur identité générée entre en conflit avec les valeurs existantes.

- Si la contrainte a PRIMARY KEY ou UNIQUE n’existe pas, les opérations d’insertion ultérieures donnent 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

L’exemple suivant réinitialise la valeur d’identité actuelle, si nécessaire, pour la table spécifiée dans la base de données.

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

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

L’exemple suivant rapporte la valeur d’identité actuelle pour la table spécifiée dans la base de données, et ne corrige pas la valeur d’identité 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 force la valeur d’identité actuelle de la AddressTypeID colonne du AddressType tableau à 10. Comme la table contient des lignes existantes, la ligne suivante insérée utilise 11 comme valeur. La nouvelle valeur d’identité actuelle définie pour la colonne plus 1 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 et (1, 1) force la valeur d’identité actuelle de la ErrorLogID colonne du ErrorLog tableau à 1, après avoir supprimé tous les enregistrements de la table. Comme la table ne contient aucune ligne existante, la ligne suivante insérée utilise 1 comme valeur. La nouvelle valeur d’identité courante sans ajouter la valeur d’incrément définie pour la colonne après TRUNCATE, ni 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

S’applique à :Entrepôt dans Microsoft Fabric

Re-ensemence la valeur identité d’une table dans Fabric Data Warehouse. Utilisez DBCC CHECKIDENT après avoir inséré des valeurs explicites pour SET IDENTITY_INSERT réaligner les plages d’identité et éviter les conflits avec les valeurs générées automatiquement à l’avenir.

Cet article et sa IDENTITY syntaxe diffèrent selon les plateformes du SQL Moteur de base de données.

Conventions de la syntaxe Transact-SQL

Syntaxe

DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )

Arguments

table_name

Le nom de la table pour laquelle re-semer la valeur d’identité. Le tableau doit contenir une colonne d’identité. Les noms des tables peuvent inclure le nom du schéma, comme 'dbo.DimCustomer' ou '[dbo].[DimCustomer]'.

RESEED

Le RESEED mot-clé est optionnel, mais DBCC CHECKIDENT il effectue toujours l’opération de reseed. Inclure ou omettre l’option produit les mêmes résultats.

Le RESEED mot-clé demande au Moteur de base de données de scanner toutes les plages d’identité utilisées et réservées, puis de définir la valeur d’identité suivante afin d’éviter les conflits avec les valeurs existantes. En Fabric Data Warehouse, RESEED effectue un balayage en fonction de la plage sur tous les nœuds de calcul distribués afin de déterminer la valeur suivante correcte.

Notes

  • En Fabric Data Warehouse, le seul argument qui DBCC CHECKIDENT soutient est l’optionRESEED, qu’elle exécute toujours. Le système détermine automatiquement les plages de valeurs d’identité suivantes correctes en fonction des données existantes. Vous ne pouvez pas spécifier une valeur de reseed personnalisée.
  • Exécutez DBCC CHECKIDENT toujours après avoir utilisé IDENTITY_INSERT pour insérer des valeurs explicites. Cette opération garantit que les futures valeurs générées automatiquement ne se heurtent pas aux valeurs insérées manuellement.
  • Dans Fabric Data Warehouse, la spécification d'une personnalisation new_reseed_value n'est pas prise en charge. En tentant de fournir une valeur, l’erreur suivante est renvoyée : Specifying a custom seed in Fabric Data Warehouse is not supported.
  • DBCC CHECKIDENT acquiert des verrous capables de bloquer les opérations DML et DDL simultanées. Pour minimiser les perturbations, exécutez la commande isolément lorsque d’autres processus n’utilisent pas activement la table.

Autorisations

Vous devez posséder la table ou avoir ALTER la permission d’en parler.

Exemples

R. Re-ensemencement après insertion des valeurs sentinelle

Après avoir rempli les valeurs sentinelle dans une table de dimensions avec SET IDENTITY_INSERT, re-semez la colonne d’identité pour éviter que les futures valeurs générées automatiquement ne se heurtent aux valeurs insérées manuellement.

-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
       (-2, 'Not Applicable');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);

B. Ensemencement après migration en vrac

Après avoir migré les données historiques avec des valeurs d’identité explicites, recommencez la table pour vous assurer que les nouvelles lignes reçoivent des valeurs qui ne se chevauchent pas avec les données migrées.

-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);

-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');

C. Reseed après COPY IN avec IDENTITY_INSERT

Après avoir chargé les données avec COPY INTO tandis IDENTITY_INSERT que , ONre-seed la colonne d’identité. COPY INTO Les options supplantent tout paramètre de niveau session pour IDENTITY_INSERT.

COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);

D. Reseed sans le mot-clé RESEED

Le RESEED mot-clé est optionnel, mais DBCC CHECKIDENT il effectue toujours l’opération de reseed. Inclure ou omettre l’option produit les mêmes résultats.

-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');

-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);