KONTROLA DBCC (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Kontroluje integritu zadaného omezení nebo všechna omezení zadané tabulky v aktuální databázi.
Syntax
DBCC CHECKCONSTRAINTS
[
(
table_name | table_id | constraint_name | constraint_id
)
]
[ WITH
[ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
[ , ] [ NO_INFOMSGS ]
]
Argumenty
table_name | table_id | constraint_name | constraint_id
Tabulka nebo omezení, které se má zkontrolovat. Při zadání table_name nebo table_id jsou zaškrtnutá všechna povolená omezení pro danou tabulku. Je-li zadán constraint_name nebo constraint_id, je zaškrtnuto pouze toto omezení. Pokud není zadaný identifikátor tabulky nebo identifikátor omezení, zkontrolují se všechna povolená omezení pro všechny tabulky v aktuální databázi.
Název omezení jednoznačně identifikuje tabulku, do které patří. Další informace naleznete v tématu identifikátory databáze.
S
Povolí zadání možností.
ALL_CONSTRAINTS
Kontroluje všechna povolená a zakázaná omezení v tabulce, pokud je zadán název tabulky nebo pokud jsou zaškrtnuté všechny tabulky; v opačném případě zkontroluje pouze povolené omezení.
ALL_CONSTRAINTS
nemá žádný vliv, pokud je zadán název omezení.ALL_ERRORMSGS
Vrátí všechny řádky, které porušují omezení v tabulce, která je zaškrtnutá. Výchozí hodnota je prvních 200 řádků.
NO_INFOMSGS
Potlačí všechny informační zprávy.
Poznámky
DBCC CHECKCONSTRAINTS
vytvoří a spustí dotaz pro všechna omezení cizího klíče a omezení CHECK v tabulce.
Dotaz cizího klíče má například následující tvar:
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;
Data dotazu jsou uložená v dočasné tabulce. Po kontrole všech požadovaných tabulek nebo omezení se vrátí sada výsledků.
DBCC CHECKCONSTRAINTS
kontroluje integritu omezení CIZÍHO KLÍČE a CHECK, ale nekontroluje integritu datových struktur na disku tabulky. Tyto kontroly struktury dat lze provádět pomocí DBCC CHECKDB a DBCC CHECKTABLE.
platí pro: SQL Server 2016 (13.x) a novější verze
Pokud je zadána table_name nebo table_id a je povolená pro správu verzí systému, DBCC CHECKCONSTRAINTS
také provádí kontroly konzistence dočasných dat v zadané tabulce. Pokud není zadaný NO_INFOMSGS, tento příkaz vrátí každé porušení konzistence ve výstupu na samostatném řádku. Formát výstupu bude ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...)
AND <what is wrong with temporal table record>
.
Kontrolovat | Další informace ve výstupu, pokud se kontrola nezdařila |
---|---|
PeriodEndColumn >= PeriodStartColumn (aktuální) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59,99999' |
PeriodEndColumn >= PeriodStartColumn (aktuální, historie) | [sys_start] = '{0}' AND [sys_end] = '{1}' |
< current_utc_time PeriodStartColumn (aktuální) | [sys_start] = '{0}' AND SYSUTCTIME |
< current_utc_time PeriodEndColumn (historie) | [sys_end] = '{0}' AND SYSUTCTIME |
Překrývá | (sys_start1, sys_end1), (sys_start2, sys_end2) pro dva překrývající se záznamy. Pokud existuje více než dva překrývající se záznamy, bude výstup obsahovat několik řádků, které zobrazují dvojici překrývajících se záznamů. |
Nemůžete zadat constraint_name
ani constraint_id
, aby bylo možné spouštět pouze dočasné kontroly konzistence.
Sady výsledků
DBCC CHECKCONSTRAINTS
vrátit sadu řádků s následujícími sloupci.
Název sloupce | Datový typ | Popis |
---|---|---|
Název tabulky | varchar | Název tabulky. |
Název omezení | varchar | Název omezení, které je porušeno. |
Kde | varchar | Přiřazení hodnot sloupců, která identifikují řádek nebo řádky, které omezení porušují. Hodnotu v tomto sloupci lze použít v klauzuli WHERE příkazu SELECT dotazující se na řádky, které porušují omezení. |
DBCC CHECKCONSTRAINTS
není zaručeno, že najdete všechna porušení omezení. Pokud jeden řádek porušuje více omezení, je uvedena pouze klauzule WHERE
pro první porušení. Pokud neexistuje jiný řádek se stejnou kombinací hodnot, které způsobily porušení, a má toto porušení jako první nalezené porušení, kombinace hodnot nebude v vrácené sadě výsledků chybět. Možná budete muset spustit DBCC CHECKCONSTRAINTS
a opravit problémy několikrát předtím, než v databázi najdete všechna porušení omezení.
Dovolení
Vyžaduje členství v pevné roli serveru nebo db_owner pevné databázové roli.
Příklady
A. Kontrola tabulky
Následující příklad zkontroluje integritu omezení tabulky Table1
v databázi AdventureWorks2022
.
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. Kontrola konkrétního omezení
Následující příklad zkontroluje integritu omezení CK_ProductCostHistory_EndDate
.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C. Kontrola všech povolených a zakázaných omezení u všech tabulek
Následující příklad zkontroluje integritu všech povolených a zakázaných omezení pro všechny tabulky v aktuální databázi.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO
Viz také
- DBCC CHECKDB (Transact-SQL)
- DBCC CHECKTABLE (Transact-SQL)
- DBCC (Transact-SQL)