Delen via


DBCC CHECKCONSTRAINTS (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Hiermee controleert u de integriteit van een opgegeven beperking of alle beperkingen op een opgegeven tabel in de huidige database.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

table_name | table_id | constraint_name | constraint_id

De tabel of beperking die moet worden gecontroleerd. Wanneer table_name of table_id is opgegeven, worden alle ingeschakelde beperkingen voor die tabel gecontroleerd. Wanneer constraint_name of constraint_id is opgegeven, wordt alleen die beperking gecontroleerd. Als er geen tabel-id of een beperkings-id is opgegeven, worden alle ingeschakelde beperkingen voor alle tabellen in de huidige database gecontroleerd.

Een naam van een beperking identificeert de tabel waartoe deze behoort. Zie Database-id'svoor meer informatie.

MET

Hiermee kunt u opties opgeven.

  • ALL_CONSTRAINTS

    Controleert alle ingeschakelde en uitgeschakelde beperkingen voor de tabel als de tabelnaam is opgegeven of als alle tabellen zijn ingeschakeld; anders controleert u alleen de ingeschakelde beperking. ALL_CONSTRAINTS heeft geen effect wanneer een naam van een beperking is opgegeven.

  • ALL_ERRORMSGS

    Retourneert alle rijen die beperkingen schenden in de tabel die is gecontroleerd. De standaardwaarde is de eerste 200 rijen.

  • NO_INFOMSGS

    Onderdrukt alle informatieve berichten.

Opmerkingen

DBCC CHECKCONSTRAINTS maakt en voert een query uit voor alle beperkingen van REFERERENDE SLEUTELS en CHECK-beperkingen voor een tabel.

Een refererende-sleutelquery heeft bijvoorbeeld de volgende vorm:

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;

De querygegevens worden opgeslagen in een tijdelijke tabel. Nadat alle aangevraagde tabellen of beperkingen zijn gecontroleerd, wordt de resultatenset geretourneerd.

DBCC CHECKCONSTRAINTS controleert de integriteit van DE REFERERENDE SLEUTEL en CHECK-beperkingen, maar controleert niet de integriteit van de gegevensstructuren op schijf van een tabel. Deze gegevensstructuurcontroles kunnen worden uitgevoerd met behulp van DBCC CHECKDB- en DBCC CHECKTABLE.

van toepassing op: SQL Server 2016 (13.x) en latere versies

Als table_name of table_id is opgegeven en deze is ingeschakeld voor systeemversiebeheer, voert DBCC CHECKCONSTRAINTS ook tijdelijke controles voor gegevensconsistentie uit op de opgegeven tabel. Wanneer NO_INFOMSGS niet is opgegeven, retourneert deze opdracht elke consistentiefout in de uitvoer op een afzonderlijke regel. De indeling van de uitvoer wordt ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) AND <what is wrong with temporal table record>.

Cheque Aanvullende informatie in uitvoer als de controle is mislukt
PeriodEndColumn >= PeriodStartColumn (huidige) [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999'
PeriodEndColumn >= PeriodStartColumn (huidige, geschiedenis) [sys_start] = '{0}' AND [sys_end] = '{1}'
PeriodStartColumn < current_utc_time (huidige) [sys_start] = '{0}' AND SYSUTCTIME
PeriodEndColumn < current_utc_time (geschiedenis) [sys_end] = '{0}' AND SYSUTCTIME
Overlapt (sys_start1, sys_end1), (sys_start2, sys_end2) voor twee overlappende records.

Als er meer dan twee overlappende records zijn, heeft de uitvoer meerdere rijen met elk een paar overlappingen.

U kunt geen constraint_name of constraint_id opgeven om alleen tijdelijke consistentiecontroles uit te voeren.

Resultatensets

DBCC CHECKCONSTRAINTS een rijset met de volgende kolommen retourneren.

Kolomnaam Gegevenstype Beschrijving
Tabelnaam varchar- Naam van de tabel.
Naam van beperking varchar- Naam van de beperking die wordt geschonden.
Waar varchar- Kolomwaardetoewijzingen waarmee de rij of rijen worden geïdentificeerd die de beperking schenden.

De waarde in deze kolom kan worden gebruikt in een WHERE-component van een SELECT-instructiequery voor rijen die de beperking schenden.

DBCC CHECKCONSTRAINTS is niet gegarandeerd alle schendingen van beperkingen. Als één rij meerdere beperkingen schendt, wordt alleen de WHERE component voor de eerste schending vermeld. Tenzij er een andere rij bestaat met dezelfde combinatie van waarden die de schending produceren en deze schending heeft als de eerste schending, ontbreekt de combinatie van waarden in de geretourneerde resultatenset. Mogelijk moet u DBCC CHECKCONSTRAINTS uitvoeren en problemen meerdere keren oplossen voordat u alle schendingen van beperkingen in de database kunt vinden.

Machtigingen

Vereist lidmaatschap van de sysadmin vaste serverfunctie of de db_owner vaste databaserol.

Voorbeelden

Een. Een tabel controleren

In het volgende voorbeeld wordt de integriteit van de beperking van de tabel Table1 in de AdventureWorks2022-database gecontroleerd.

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. Een specifieke beperking controleren

In het volgende voorbeeld wordt de integriteit van de beperking CK_ProductCostHistory_EndDate gecontroleerd.

USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO

C. Alle ingeschakelde en uitgeschakelde beperkingen voor alle tabellen controleren

In het volgende voorbeeld wordt de integriteit gecontroleerd van alle ingeschakelde en uitgeschakelde beperkingen voor alle tabellen in de huidige database.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Zie ook