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


DBCC CHECKCONSTRAINTS (Transact-SQL)

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

Значок ссылки на разделСоглашение о синтаксисе в 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, проверяется только указанное ограничение. Если не указаны ни идентификатор таблицы, ни идентификатор ограничения, проверяются все включенные ограничения всех таблиц в текущей базе данных.

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

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

  • 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.

Результирующие наборы

DBCC CHECKCONSTRAINTS возвращает набор строк со следующими столбцами.

Имя столбца

Тип данных

Описание

Table Name

varchar

Имя таблицы.

Constraint Name

varchar

Имя нарушенного ограничения.

Where

varchar

Значения столбцов, которые идентифицируют строку или строки, которые нарушают ограничение.

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

Разрешения

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

Примеры

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

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

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
DBCC CHECKCONSTRAINTS ("Production.CK_ProductCostHistory_EndDate");
GO

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

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

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO