Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure 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
- DBCC CHECKDB (Transact-SQL)
- DBCC CHECKTABLE (Transact-SQL)
- DBCC (Transact-SQL)