DBCC CHECKCONSTRAINTS (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Überprüft die Integrität einer angegebenen Einschränkung oder aller Einschränkungen einer angegebenen Tabelle in der aktuellen Datenbank.

Topic link icon Transact-SQL-Syntaxkonventionen

  
DBCC CHECKCONSTRAINTS  
[   
    (   
    table_name | table_id | constraint_name | constraint_id   
    )  
]  
    [ WITH   
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]  
    [ , ] [ NO_INFOMSGS ]   
    ]  

TABLE_NAME | Table_id | Constraint_name | Constraint_id
Die zu überprüfende Tabelle oder Einschränkung. Wenn Table_name oder Table_id wird angegeben, werden alle aktivierte Einschränkungen der Tabelle überprüft. Wenn Constraint_name oder Constraint_id wird angegeben, wird nur diese Einschränkung überprüft. Wenn weder ein Tabellenbezeichner noch ein 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 das Festlegen von 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.

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 können ausgeführt werden, mithilfe von DBCC CHECKDB und DBCC CHECKTABLE.

Gilt für: SQL Server 2016 bis SQL Server 2016.

Wenn Table_name oder Table_id angegeben ist und es für die versionsverwaltung durch das System aktiviert ist, führt DBCC CHECKCONSTRAINTS außerdem konsistenzprüfungen temporaler Daten für die angegebene Tabelle. Wenn NO_INFOMSGS nicht angegeben ist, wird dieser Befehl wird jeder Verstoß Konsistenz in der Ausgabe in einer separaten Zeile zurück. Das Format der Ausgabe werden ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) AND >.</pkcol2_value></pkcol1_value>

CheckZusätzliche Informationen in der Ausgabe, wenn Fehler bei der Überprüfung
PeriodEndColumn ≥ PeriodStartColumn (aktuell)[Sys_end] = '{0}' und MAX(DATETIME2) = ' 9999-12-31 23:59:59.99999 "
PeriodEndColumn ≥ PeriodStartColumn (aktuell sind, Verlauf)[Sys_start] = "{0}" und [Sys_end] = "\ {1}"
PeriodStartColumn< current_utc_time (current) current_utc_time=""></ current_utc_time (current)>[Sys_start] = '{0}' und SYSUTCTIME
PeriodEndColumn< current_utc_time (history) current_utc_time=""></ current_utc_time (history)>[Sys_end] = '{0}' und SYSUTCTIME
(Überlappungen)(sys_start1 sys_end1), (sys_start2 sys_end2) für zwei überlappende Datensätze.

Wenn mehr als 2 überlappende Datensätze sind, müssen Ausgabe mehrere Zeilen jeder mit ein Paar von überlappt.

Es gibt keine Möglichkeit Constraint_name oder Constraint_id angeben, um nur temporale konsistenzprüfungen ausgeführt.

DBCC CHECKCONSTRAINTS gibt ein Rowset mit folgenden Spalten zurück.

SpaltennameDatentypDescription
TabellennamevarcharDer Name der Tabelle.
Constraint NamevarcharName der verletzten Einschränkung.
ErläuterungenvarcharSpaltenwertzuweisungen, 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.

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner .

A. Überprüfen einer Tabelle

Im folgenden Beispiel wird die Einschränkungsintegrität der Table1-Tabelle in der AdventureWorks-Datenbank überprüft.

USE AdventureWorks2012;  
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 AdventureWorks2012;  
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  

DBCC CHECKDB (Transact-SQL)
DBCC CHECKTABLE (Transact-SQL)
DBCC (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: