Dela via


DBCC CHECKCONSTRAINTS (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure 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_name | constraint_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_CONSTRAINTS har 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 är ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) OCH <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}' AND [sys_end] = '{1}'
PeriodStartColumn < current_utc_time (aktuell) [sys_start] = '{0}' AND SYSUTCTIME
PeriodEndColumn < current_utc_time (historik) [sys_end] = '{0}' AND 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

Se även