Ескерім
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: 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