Поделиться через


DBCC CHECKCONSTRAINTS (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Проверяет целостность указанного ограничения или всех ограничений заданной таблицы в текущей базе данных.

Соглашения о синтаксисе Transact-SQL

Синтаксис

DBCC CHECKCONSTRAINTS
[
    (
    table_name | table_id | constraint_name | constraint_id
    )
]
    [ WITH
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
    [ , ] [ NO_INFOMSGS ]
    ]

Аргументы

table_name | table_id | constraint_name | constraint_id

Проверяемая таблица или ограничение. Если указан аргумент table_name или table_id, проверяются все включенные ограничения в данной таблице. Если указан аргумент constraint_name или constraint_id, проверяется только это ограничение. Если не указаны ни идентификатор таблицы, ни идентификатор ограничения, проверяются все включенные ограничения всех таблиц в текущей базе данных.

Имя ограничения однозначно определяет таблицу, к которой оно принадлежит. Дополнительные сведения см. в разделе Идентификаторы баз данных.

ВМЕСТЕ С

Позволяет задавать параметры.

  • ALL_CONSTRAINTS

    Проверяет все включенные и отключенные ограничения таблицы, если указано имя таблицы или отмечены все таблицы. В противном случае проверяет только включенные ограничения. ALL_CONSTRAINTS не действует, если указано имя ограничения.

  • ALL_ERRORMSGS

    Возвращает все строки, которые не соответствуют ограничениям в проверяемой таблице. По умолчанию, это первые 200 строк.

  • NO_INFOMSGS

    Подавляет вывод всех информационных сообщений.

Замечания

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 возвращает набор строк со следующими столбцами.

Имя столбца Тип данных Description
Имя таблицы varchar Имя таблицы.
Constraint Name varchar Имя нарушенного ограничения.
Где varchar Значения столбцов, которые идентифицируют строку или строки, которые нарушают ограничение.

Значение этого столбца может быть использовано в предложении WHERE инструкции SELECT, которая запрашивает строки, нарушающие ограничение.

DBCC CHECKCONSTRAINTS не гарантирует, что будут обнаружены все нарушения ограничений. Если одна строка нарушает несколько ограничений, предложение WHERE выводится только для первого нарушения. Сочетание значений будет отсутствовать в возвращаемом результирующем наборе, если только не существует другая строка с таким же сочетанием значений, создающих нарушение, которое обнаруживается первым. Для поиска всех нарушений ограничения, возможно, потребуется выполнить DBCC CHECKCONSTRAINTS несколько раз и устранить проблемы.

Разрешения

Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner .

Примеры

А. Проверка таблицы

Следующий пример проверяет целостность ограничений таблицы 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

B. Проверка конкретного ограничения

Следующий пример проверяет целостность ограничения CK_ProductCostHistory_EndDate.

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

В. Проверка всех включенных и отключенных ограничений во всех таблицах

Следующий пример проверяет целостность всех включенных и отключенных ограничений всех таблиц текущей базы данных.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

См. также