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_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