DBCC CHECKCONSTRAINTS (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Überprüft die Integrität einer angegebenen Einschränkung oder aller Einschränkungen einer angegebenen Tabelle in der aktuellen Datenbank.
Transact-SQL-Syntaxkonventionen
Syntax
DBCC CHECKCONSTRAINTS
[
(
table_name | table_id | constraint_name | constraint_id
)
]
[ WITH
[ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
[ , ] [ NO_INFOMSGS ]
]
Argumente
table_name | table_id | constraint_name | constraint_id
Die zu überprüfende Tabelle oder Einschränkung. Wenn table_name oder table_id angegeben ist, werden alle aktivierten Einschränkungen der Tabelle überprüft. Wenn constraint_name oder constraint_id angegeben wird, wird nur diese Einschränkung überprüft. Wenn kein Tabellenbezeichner oder kein Einschränkungsbezeichner angegeben ist, werden alle aktivierten Einschränkungen für alle Tabellen in der aktuellen Datenbank überprüft.
Durch den Einschränkungsnamen wird die zugehörige Tabelle eindeutig identifiziert. Weitere Informationen finden Sie unter Datenbankbezeichner.
WITH
Aktiviert anzugebende Optionen.
ALL_CONSTRAINTS
Überprüft alle aktivierten und deaktivierten Einschränkungen der Tabelle, wenn der Tabellenname angegeben ist oder wenn alle Tabellen überprüft werden. Andernfalls wird nur die aktivierte Einschränkung überprüft.
ALL_CONSTRAINTS
hat keine Wirkung, wenn ein Einschränkungsname angegeben ist.ALL_ERRORMSGS
Gibt alle Zeilen zurück, die den Einschränkungen der überprüften Tabelle nicht entsprechen. Standardmäßig sind dies die ersten 200 Zeilen.
NO_INFOMSGS
Alle Informationsmeldungen werden unterdrückt.
Bemerkungen
DBCC CHECKCONSTRAINTS
erstellt für alle FOREIGN KEY- und CHECK-Einschränkungen einer Tabelle eine Abfrage und führt sie aus.
Eine FOREIGN KEY-Abfrage sieht beispielsweise folgendermaßen aus:
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;
Die Abfragedaten werden in einer temporären Tabelle gespeichert. Wenn alle geforderten Tabellen oder Einschränkungen überprüft wurden, wird das Resultset zurückgegeben.
DBCC CHECKCONSTRAINTS
prüft die Integrität von FOREIGN KEY- und CHECK-Einschränkungen, aber nicht die Integrität der auf dem Datenträger gespeicherten Datenstrukturen einer Tabelle. Solche Datenstrukturprüfungen können mit DBCC CHECKDB und DBCC CHECKTABLE ausgeführt werden.
Gilt für: SQL Server 2016 (13.x) und höhere Versionen
Wenn table_name oder table_id angegeben ist und für die Versionsverwaltung durch das System aktiviert ist, führt DBCC CHECKCONSTRAINTS
außerdem Konsistenzprüfungen temporärer Daten für die angegebene Tabelle aus. Wenn NO_INFOMSGS nicht angegeben ist, gibt dieser Befehl jeden Konsistenzverstoß in einer separaten Zeile in der Ausgabe zurück. Das Format der Ausgabe ist ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...)
UND <what is wrong with temporal table record>
.
Prüfen | Zusätzliche Informationen in der Ausgabe, wenn die Prüfung einen Fehler zurückgibt |
---|---|
PeriodEndColumn >= PeriodStartColumn (aktuell) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999' |
PeriodEndColumn >= PeriodStartColumn (aktuell, Vergangenheit) | [sys_start] = '{0}' AND [sys_end] = '{1}' |
PeriodStartColumn < current_utc_time (aktuell) | [sys_start] = '{0}' AND SYSUTCTIME |
PeriodEndColumn < current_utc_time (Vergangenheit) | [sys_end] = '{0}' AND SYSUTCTIME |
Überschneidungen | (sys_start1, sys_end1), (sys_start2, sys_end2) für zwei sich überschneidende Einträge. Wenn sich mehr als zwei Einträge überschneiden, enthält die Ausgabe mehrere Zeilen, die jeweils ein Paar von Überschneidungen enthalten. |
Sie können constraint_name
oder constraint_id
nicht angeben, um nur temporale Konsistenzprüfungen auszuführen.
Resultsets
DBCC CHECKCONSTRAINTS
gibt ein Rowset mit folgenden Spalten zurück.
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
Tabellenname | varchar | Der Name der Tabelle. |
Constraint Name | varchar | Name der verletzten Einschränkung. |
Hierbei gilt: | varchar | Spaltenwertzuweisungen, die die Zeile bzw. die Zeilen, die die Einschränkung verletzen, identifizieren. Der Wert in dieser Spalte kann in einer WHERE-Klausel einer SELECT-Anweisung verwendet werden, die hinsichtlich Zeilen abfragt, die die Einschränkung verletzen. |
Bei DBCC CHECKCONSTRAINTS
ist nicht garantiert, dass alle Einschränkungsverletzungen gefunden werden. Wenn eine einzelne Zeile mehrere Einschränkungen verletzt, wird nur die WHERE
-Klausel für die erste Verletzung aufgeführt. Wenn keine andere Zeile mit der gleichen Wertekombination vorhanden ist, die den Verstoß hervorruft und diesen Verstoß als ersten gefundenen Verstoß aufweist, fehlt die Wertekombination im zurückgegebenen Resultset. Möglicherweise müssen Sie DBCC CHECKCONSTRAINTS
mehrmals ausführen und Probleme beheben, bevor Sie alle Einschränkungsverletzungen in der Datenbank finden.
Berechtigungen
Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner .
Beispiele
A. Überprüfen einer Tabelle
Im folgenden Beispiel wird die Einschränkungsintegrität der Table1
-Tabelle in der AdventureWorks2022
-Datenbank überprüft.
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. Überprüfen einer bestimmten Einschränkung
Im folgenden Beispiel wird die Integrität der CK_ProductCostHistory_EndDate
-Einschränkung überprüft.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C. Überprüfen aller aktivierten und deaktivierten Einschränkungen für alle Tabellen
Im folgenden Beispiel wird die Integrität aller aktivierten und deaktivierten Einschränkungen für alle Tabellen in der aktuellen Datenbank überprüft.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO