Udostępnij za pośrednictwem


OGRANICZENIA SPRAWDZANIA DBCC (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Sprawdza integralność określonego ograniczenia lub wszystkich ograniczeń dla określonej tabeli w bieżącej bazie danych.

Transact-SQL konwencje składni

Składnia

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

Tabela lub ograniczenie do sprawdzenia. Po określeniu table_name lub table_id wszystkie włączone ograniczenia dla tej tabeli są sprawdzane. Po określeniu constraint_name lub constraint_id sprawdzane jest tylko to ograniczenie. Jeśli nie określono identyfikatora tabeli lub identyfikatora ograniczenia, sprawdzane są wszystkie włączone ograniczenia dla wszystkich tabel w bieżącej bazie danych.

Nazwa ograniczenia jednoznacznie identyfikuje tabelę, do której należy. Aby uzyskać więcej informacji, zobacz Database Identifiers.

Z

Umożliwia określenie opcji.

  • ALL_CONSTRAINTS

    Sprawdza wszystkie włączone i wyłączone ograniczenia w tabeli, jeśli nazwa tabeli jest określona lub czy wszystkie tabele są zaznaczone; w przeciwnym razie sprawdza tylko włączone ograniczenie. ALL_CONSTRAINTS nie ma wpływu, gdy zostanie określona nazwa ograniczenia.

  • ALL_ERRORMSGS

    Zwraca wszystkie wiersze naruszające ograniczenia w zaznaczonej tabeli. Wartość domyślna to pierwsze 200 wierszy.

  • NO_INFOMSGS

    Pomija wszystkie komunikaty informacyjne.

Uwagi

DBCC CHECKCONSTRAINTS konstruuje i wykonuje zapytanie dotyczące wszystkich ograniczeń klucza obcego i ograniczeń CHECK w tabeli.

Na przykład zapytanie klucza obcego ma następującą postać:

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;

Dane zapytania są przechowywane w tabeli tymczasowej. Po sprawdzeniu wszystkich żądanych tabel lub ograniczeń zwracany jest zestaw wyników.

DBCC CHECKCONSTRAINTS sprawdza integralność klucza obcego i ograniczeń CHECK, ale nie sprawdza integralności struktur danych na dysku tabeli. Te kontrole struktury danych można wykonać przy użyciu DBCC CHECKDB i DBCC CHECKTABLE.

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje

Jeśli określono table_name lub table_id i jest włączona na potrzeby przechowywania wersji systemu, DBCC CHECKCONSTRAINTS również przeprowadza kontrole spójności danych czasowych w określonej tabeli. Jeśli NO_INFOMSGS nie zostanie określony, to polecenie zwróci każde naruszenie spójności w danych wyjściowych w osobnym wierszu. Format danych wyjściowych będzie ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) AND <what is wrong with temporal table record>.

Sprawdzić Dodatkowe informacje w danych wyjściowych, jeśli sprawdzanie nie powiodło się
PeriodEndColumn >= PeriodStartColumn (bieżący) [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999'
PeriodEndColumn >= PeriodStartColumn (bieżący, historia) [sys_start] = '{0}' AND [sys_end] = '{1}'
PeriodStartColumn < current_utc_time (bieżąca) [sys_start] = '{0}' AND SYSUTCTIME
< current_utc_time PeriodEndColumn (historia) [sys_end] = '{0}' AND SYSUTCTIME
Zachodzi (sys_start1, sys_end1), (sys_start2, sys_end2) dla dwóch nakładających się rekordów.

Jeśli istnieje więcej niż dwa nakładające się rekordy, dane wyjściowe będą miały wiele wierszy, z których każda pokazuje parę nakładających się rekordów.

Nie można określić constraint_name ani constraint_id w celu uruchomienia tylko kontroli spójności czasowej.

Zestawy wyników

DBCC CHECKCONSTRAINTS zwrócić zestaw wierszy z następującymi kolumnami.

Nazwa kolumny Typ danych Opis
Nazwa tabeli varchar Nazwa tabeli.
Nazwa ograniczenia varchar Nazwa ograniczenia, które jest naruszone.
Gdzie varchar Przypisania wartości kolumny identyfikujące wiersze lub wiersze naruszające ograniczenie.

Wartość w tej kolumnie może być używana w klauzuli WHERE instrukcji SELECT kwerendy dla wierszy, które naruszają ograniczenie.

DBCC CHECKCONSTRAINTS nie gwarantuje znalezienia wszystkich naruszeń ograniczeń. Jeśli jeden wiersz narusza wiele ograniczeń, zostanie wyświetlona tylko klauzula WHERE pierwszego naruszenia. Jeśli inny wiersz nie istnieje z tą samą kombinacją wartości, które generują naruszenie i ma to naruszenie jako pierwsze naruszenie, kombinacja wartości nie będzie dostępna w zwracanym zestawie wyników. Może być konieczne uruchomienie DBCC CHECKCONSTRAINTS i rozwiązanie problemów kilka razy przed znalezieniem wszystkich naruszeń ograniczeń w bazie danych.

Uprawnienia

Wymaga członkostwa w sysadmin stałej roli serwera lub stałej roli bazy danych db_owner.

Przykłady

A. Sprawdzanie tabeli

Poniższy przykład sprawdza integralność ograniczenia tabeli Table1 w bazie danych 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. Sprawdzanie określonego ograniczenia

Poniższy przykład sprawdza integralność ograniczenia CK_ProductCostHistory_EndDate.

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

C. Sprawdź wszystkie włączone i wyłączone ograniczenia dla wszystkich tabel

Poniższy przykład sprawdza integralność wszystkich włączonych i wyłączonych ograniczeń dla wszystkich tabel w bieżącej bazie danych.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Zobacz też