Partage via


DBCC CHECKCONSTRAINTS (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Vérifie l'intégrité d'une contrainte spécifiée ou de toutes les contraintes sur une table spécifiée de la base de données en cours.

Conventions de la syntaxe Transact-SQL

Syntaxe

DBCC CHECKCONSTRAINTS
[
    (
    table_name | table_id | constraint_name | constraint_id
    )
]
    [ WITH
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
    [ , ] [ 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 | table_id | constraint_name | constraint_id

Table ou contrainte à vérifier. Quand table_name ou table_id est spécifié, toutes les contraintes activées sur cette table sont vérifiées. Quand constraint_name ou constraint_id est spécifié, seule cette contrainte est vérifiée. Si aucun identificateur de table ou identificateur de contrainte n’est spécifié, toutes les contraintes activées sur toutes les tables de la base de données actuelle sont vérifiées.

Un nom de contrainte identifie de manière unique la table à laquelle la contrainte appartient. Pour plus d'informations, consultez Database Identifiers.

WITH

Permet de spécifier des options.

  • ALL_CONSTRAINTS

    Vérifie toutes les contraintes activées et désactivées de la table si le nom de la table est défini, ou bien si toutes les tables sont vérifiées. Si tel n'est pas le cas, vérifie seulement la contrainte activée. ALL_CONSTRAINTS n'a pas d'effet lorsqu'un nom de contrainte est spécifié.

  • ALL_ERRORMSGS

    Renvoie toutes les lignes qui violent les contraintes de la table vérifiée. Cette instruction concerne par défaut les 200 premières lignes.

  • NO_INFOMSGS

    Supprime tous les messages d'information.

Notes

DBCC CHECKCONSTRAINTS crée et exécute une requête pour toutes les contraintes FOREIGN KEY et les contraintes CHECK sur une table.

Par exemple, une requête de clé étrangère se présente comme suit :

SELECT <columns>
FROM <table_being_checked> LEFT JOIN <referenced_table>
    ON <table_being_checked.fkey1> = <referenced_table.pkey1>
    AND <table_being_checked.fkey2> = <referenced_table.pkey2>
WHERE <table_being_checked.fkey1> IS NOT NULL
    AND <referenced_table.pkey1> IS NULL
    AND <table_being_checked.fkey2> IS NOT NULL
    AND <referenced_table.pkey2> IS NULL;

Les données de la requête sont stockées dans une table temporaire. Une fois que toutes les tables ou les contraintes demandées ont été vérifiées, le jeu de résultats est renvoyé.

DBCC CHECKCONSTRAINTS vérifie l’intégrité des contraintes FOREIGN KEY et CHECK, mais ne vérifie pas celle des structures de données sur disque d’une table. Ces vérifications de structures de données peuvent être effectuées à l’aide de DBCC CHECKDB et de DBCC CHECKTABLE.

S’applique à : SQL Server 2016 (13.x) et versions ultérieures

Si table_name ou table_id est spécifié et activé pour la gestion système des versions, DBCC CHECKCONSTRAINTS effectue également des vérifications de cohérence des données temporelles sur la table spécifiée. Quand NO_INFOMSGS n’est pas spécifié, cette commande retourne chaque violation de cohérence dans la sortie sur une ligne distincte. Le format de la sortie sera ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) ET <what is wrong with temporal table record>.

Vérification Informations supplémentaires dans la sortie en cas d’échec de la vérification
PeriodEndColumn >= PeriodStartColumn (current) [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999'
PeriodEndColumn >= PeriodStartColumn (current, history) [sys_start] = '{0}' AND [sys_end] = '{1}'
PeriodStartColumn < current_utc_time (current) [sys_start] = '{0}' AND SYSUTCTIME
PeriodEndColumn < current_utc_time (history) [sys_end] = '{0}' AND SYSUTCTIME
Chevauchements (sys_start1, sys_end1), (sys_start2, sys_end2) pour deux enregistrements qui se chevauchent.

S’il existe plus de deux enregistrements qui se chevauchent, la sortie affiche plusieurs lignes indiquant chacune une paire de chevauchements.

Vous ne pouvez pas spécifier constraint_name ou constraint_id pour exécuter uniquement des vérifications de cohérence temporelle.

Jeux de résultats

DBCC CHECKCONSTRAINTS retourne un ensemble de lignes comportant les colonnes suivantes.

Nom de la colonne Type de données Description
Nom de la table varchar Nom de la table.
Constraint Name (Nom de la contrainte) varchar Nom de la contrainte qui n'est pas respectée.
Where varchar Affectations des valeurs de la colonne qui identifient la ou les lignes ne respectant pas la contrainte.

La valeur de cette colonne peut être utilisée dans la clause WHERE d'une instruction SELECT qui demande les lignes qui ne respectent pas la contrainte.

Il n’est pas garanti que DBCC CHECKCONSTRAINTS trouve toutes les violations de contrainte. Si une seule ligne enfreint plusieurs contraintes, seule la clause de la WHERE première violation est répertoriée. À moins qu’une autre ligne existe avec la même combinaison de valeurs produisant la violation et que cette violation soit la première trouvée, la combinaison de valeurs sera absente du jeu de résultats retourné. Il se peut que vous deviez exécuter DBCC CHECKCONSTRAINTS et corriger des problèmes à plusieurs reprises avant de trouver toutes les violations de contrainte dans la base de données.

Autorisations

Nécessite l’appartenance au rôle de serveur fixe sysadmin ou au rôle de base de données fixe db_owner .

Exemples

R. Vérifier une table

L'exemple suivant vérifie l'intégrité des contraintes de la table Table1 de la base de données AdventureWorks2022.

USE AdventureWorks2022;
GO
CREATE TABLE Table1 (Col1 INT, Col2 CHAR(30));
GO
INSERT INTO Table1 VALUES (100, 'Hello');
GO
ALTER TABLE Table1 WITH NOCHECK ADD CONSTRAINT chkTab1 CHECK (Col1 > 100);
GO
DBCC CHECKCONSTRAINTS (Table1);
GO

B. Vérifier une contrainte spécifique

L'exemple suivant vérifie l'intégrité de la contrainte CK_ProductCostHistory_EndDate.

USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO

C. Vérifier toutes les contraintes activées et désactivées sur toutes les tables

L'exemple suivant vérifie l'intégrité de toutes les contraintes activées et désactivées de toutes les tables de la base de données actuelle.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Voir aussi