Sdílet prostřednictvím


KONTROLA DBCC (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Kontroluje integritu zadaného omezení nebo všechna omezení zadané tabulky v aktuální databázi.

Transact-SQL konvence syntaxe

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é