DBCC CHECKCONSTRAINTS (Transact-SQL)
Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure
Проверяет целостность указанного ограничения или всех ограничений заданной таблицы в текущей базе данных.
Соглашения о синтаксисе Transact-SQL
Синтаксис
DBCC CHECKCONSTRAINTS
[
(
table_name | table_id | constraint_name | constraint_id
)
]
[ WITH
[ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
[ , ] [ NO_INFOMSGS ]
]
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
table_name | table_id | constraint_name | constraint_id
Проверяемая таблица или ограничение. Если указан аргумент table_name или table_id, проверяются все включенные ограничения в данной таблице. Если указан аргумент constraint_name или constraint_id, проверяется только это ограничение. Если не указаны ни идентификатор таблицы, ни идентификатор ограничения, проверяются все включенные ограничения всех таблиц в текущей базе данных.
Имя ограничения однозначно определяет таблицу, к которой оно принадлежит. Дополнительные сведения см. в разделе Идентификаторы баз данных.
WITH
Позволяет задавать параметры.
ALL_CONSTRAINTS
Проверяет все включенные и отключенные ограничения таблицы, если указано имя таблицы или отмечены все таблицы. В противном случае проверяет только включенные ограничения.
ALL_CONSTRAINTS
не действует при указании имени ограничения.ALL_ERRORMSGS
Возвращает все строки, которые не соответствуют ограничениям в проверяемой таблице. По умолчанию, это первые 200 строк.
NO_INFOMSGS
Подавляет вывод всех информационных сообщений.
Remarks
DBCC CHECKCONSTRAINTS
создает и выполняет запрос для всех ограничений FOREIGN KEY и CHECK в таблице.
Например, запрос внешних ключей имеет такой вид:
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;
Данные запроса хранятся во временной таблице. После того, как все указанные таблицы или ограничения были проверены, возвращается результирующий набор.
DBCC CHECKCONSTRAINTS
проверяет целостность ограничений FOREIGN KEY и CHECK, но не проверяет целостность дисковых структур данных таблицы. Проверки этих структур данных могут быть произведены с помощью команд DBCC CHECKDB и DBCC CHECKTABLE.
Область применения: SQL Server 2016 (13.x) и более поздних версий
Если указан аргумент table_name или table_id и для соответствующей таблицы включено системное управление версиями, DBCC CHECKCONSTRAINTS
также проводит для нее проверки согласованности темпоральных данных. Если параметр NO_INFOMSGS не указан, эта команда возвращает сведения о всех нарушениях согласованности в отдельной строке выходных данных. Формат выходных данных будет иметь вид ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...)
AND <what is wrong with temporal table record>
.
Проверить | Дополнительные сведения в выходных данных в случае неудачного завершения проверки |
---|---|
PeriodEndColumn >= PeriodStartColumn (current) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999' |
PeriodEndColumn >= PeriodStartColumn (current, history) | [sys_start] = '{0}' AND [sys_end] = '{1}' |
PeriodStartColumn < current_utc_time (current) | [sys_start] = '{0}' AND SYSUTCTIME |
PeriodEndColumn < current_utc_time (history) | [sys_end] = '{0}' AND SYSUTCTIME |
Перекрытия | (sys_start1, sys_end1), (sys_start2, sys_end2) для двух перекрывающихся записей. Если перекрывающихся записей больше двух, в выходных данных будет несколько строк, в каждой из которых содержится одна пара перекрытий. |
Невозможно указать constraint_name
или constraint_id
для выполнения только проверок согласованности темпоральных данных.
Наборы результатов
DBCC CHECKCONSTRAINTS
возвращает набор строк со следующими столбцами.
Имя столбца | Тип данных | Описание |
---|---|---|
Имя таблицы | varchar | Имя таблицы. |
Constraint Name | varchar | Имя нарушенного ограничения. |
Where | varchar | Значения столбцов, которые идентифицируют строку или строки, которые нарушают ограничение. Значение этого столбца может быть использовано в предложении WHERE инструкции SELECT, которая запрашивает строки, нарушающие ограничение. |
DBCC CHECKCONSTRAINTS
не гарантирует, что будут обнаружены все нарушения ограничений. Если одна строка нарушает несколько ограничений, предложение WHERE
выводится только для первого нарушения. Сочетание значений будет отсутствовать в возвращаемом результирующем наборе, если только не существует другая строка с таким же сочетанием значений, создающих нарушение, которое обнаруживается первым. Для поиска всех нарушений ограничения, возможно, потребуется выполнить DBCC CHECKCONSTRAINTS
несколько раз и устранить проблемы.
Разрешения
Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner .
Примеры
A. Проверка таблицы
Следующий пример проверяет целостность ограничений таблицы Table1
в базе данных 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
Б. Проверка конкретного ограничения
Следующий пример проверяет целостность ограничения CK_ProductCostHistory_EndDate
.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
В. Проверка всех включенных и отключенных ограничений во всех таблицах
Следующий пример проверяет целостность всех включенных и отключенных ограничений всех таблиц текущей базы данных.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO