Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure 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