Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Kontrollerar integriteten för en angiven begränsning eller alla begränsningar i en angiven tabell i den aktuella databasen.
              
              
              Transact-SQL syntaxkonventioner
Syntax
DBCC CHECKCONSTRAINTS
[
    (
    table_name | table_id | constraint_name | constraint_id
    )
]
    [ WITH
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
    [ , ] [ NO_INFOMSGS ]
    ]
Argument
| table_name | table_id | constraint_nameconstraint_id
Tabellen eller villkoret som ska kontrolleras. När table_name eller table_id har angetts kontrolleras alla aktiverade begränsningar i tabellen. När constraint_name eller constraint_id har angetts kontrolleras endast den begränsningen. Om en tabellidentifierare eller en begränsningsidentifierare inte har angetts kontrolleras alla aktiverade begränsningar för alla tabeller i den aktuella databasen.
Ett villkorsnamn identifierar unikt den tabell som den tillhör. Mer information finns i Databasidentifierare.
MED
Aktiverar alternativ som ska anges.
- ALL_CONSTRAINTS - Kontrollerar alla aktiverade och inaktiverade begränsningar i tabellen om tabellnamnet har angetts eller om alla tabeller är markerade. annars kontrollerar endast den aktiverade begränsningen. - ALL_CONSTRAINTShar ingen effekt när ett villkorsnamn anges.
- ALL_ERRORMSGS - Returnerar alla rader som bryter mot begränsningarna i tabellen som är markerad. Standardvärdet är de första 200 raderna. 
- NO_INFOMSGS - Undertrycker alla informationsmeddelanden. 
Anmärkningar
              DBCC CHECKCONSTRAINTS konstruerar och kör en fråga för alla begränsningar för SEKUNDÄRNYCKEL och CHECK-begränsningar i en tabell.
En sekundärnyckelfråga är till exempel i följande formulär:
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;
Frågedata lagras i en temporär tabell. När alla begärda tabeller eller begränsningar har markerats returneras resultatuppsättningen.
              DBCC CHECKCONSTRAINTS kontrollerar integriteten för begränsningarna FOREIGN KEY och CHECK men kontrollerar inte integriteten för datastrukturerna på disken i en tabell. Dessa datastrukturkontroller kan utföras med hjälp av DBCC CHECKDB och DBCC CHECKTABLE.
gäller för: SQL Server 2016 (13.x) och senare versioner
Om table_name eller table_id har angetts och det är aktiverat för systemversionshantering utför DBCC CHECKCONSTRAINTS även kontroller av datakonsekvens i den angivna tabellen. När NO_INFOMSGS inte anges returnerar det här kommandot varje konsekvensöverträdelse i utdata på en separat rad. Utdataformatet blir ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) AND <what is wrong with temporal table record>.
| Check | Ytterligare information i utdata om kontrollen misslyckades | 
|---|---|
| PeriodEndColumn >= PeriodStartColumn (aktuell) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999' | 
| PeriodEndColumn >= PeriodStartColumn (aktuell, historik) | [sys_start] = '{0}' OCH [sys_end] = '{1}' | 
| PeriodStartColumn < current_utc_time (aktuell) | [sys_start] = '{0}' OCH SYSUTCTIME | 
| PeriodEndColumn < current_utc_time (historik) | [sys_end] = '{0}' OCH SYSUTCTIME | 
| Överlappningar | (sys_start1, sys_end1), (sys_start2, sys_end2) för två överlappande poster. Om det finns fler än två överlappande poster har utdata flera rader som var och en visar ett par överlappningar. | 
Du kan inte ange constraint_name eller constraint_id för att endast köra temporala konsekvenskontroller.
Resultatuppsättningar
              DBCC CHECKCONSTRAINTS returnera en raduppsättning med följande kolumner.
| Kolumnnamn | Datatyp | Beskrivning | 
|---|---|---|
| Tabellnamn | varchar | Tabellens namn. | 
| Villkorsnamn | varchar | Namn på den begränsning som överträds. | 
| Var | varchar | Kolumnvärdetilldelningar som identifierar raden eller raderna som bryter mot villkoret. Värdet i den här kolumnen kan användas i en WHERE-sats i en SELECT-instruktion som frågar efter rader som bryter mot villkoret. | 
              DBCC CHECKCONSTRAINTS är inte garanterat att hitta alla begränsningsöverträdelser. Om en enskild rad bryter mot flera begränsningar visas endast WHERE-satsen för den första överträdelsen. Om det inte finns en annan rad med samma kombination av värden som genererar överträdelsen och har den överträdelsen som den första överträdelsen hittades, kommer kombinationen av värden att saknas i den returnerade resultatuppsättningen. Du kan behöva köra DBCC CHECKCONSTRAINTS och åtgärda problem flera gånger innan du hittar alla begränsningar i databasen.
Behörigheter
Kräver medlemskap i sysadmin fast serverroll eller db_owner fast databasroll.
Exempel
A. Kontrollera en tabell
I följande exempel kontrolleras begränsningsintegriteten för tabellen Table1 i AdventureWorks2022-databasen.
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. Kontrollera en specifik begränsning
I följande exempel kontrolleras integriteten för villkoret CK_ProductCostHistory_EndDate.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C. Kontrollera alla aktiverade och inaktiverade begränsningar för alla tabeller
I följande exempel kontrolleras integriteten för alla aktiverade och inaktiverade begränsningar för alla tabeller i den aktuella databasen.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO