檢查指定表上的指定約束或所有約束的完整性。
DBCC CHECKCONSTRAINTS
[( 'table_name' | 'constraint_name'
)]
[ WITH { ALL_ERRORMSGS | ALL_CONSTRAINTS } ]
'table_name' | 'constraint_name'
是要檢查的表或約束。如果指定 table_name,則對該表所有啟用的約束進行檢查。如果指定 constraint_name,則只對該約束進行檢查。如果 table_name 和 constraint_name 都沒有指定,將檢查當前數(shù)據(jù)庫中所有表上啟用的約束。
約束名稱唯一地標識其所屬的表。有關更多信息,請參見使用標識符。
ALL_CONSTRAINTS
如果指定了表名或檢查所有的表,則對表上所有啟用及禁用的約束進行檢查。否則,只檢查啟用的約束。如果指定了約束名,則 ALL_CONSTRAINTS 無效。
ALL_ERRORMSGS
返回所檢查的表中違反約束的所有行。默認為前 200 行。
DBCC CHECKCONSTRAINTS 構造并執(zhí)行一個對表的所有外鍵約束和檢查約束的查詢。
例如,外鍵查詢可有如下形式:
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
查詢數(shù)據(jù)存儲在臨時表中。檢查完所有請求的表和約束后,將返回結果集。
DBCC CHECKCONSTRAINTS 檢查外鍵和已檢查的約束的完整性,但并不檢查表的磁盤上數(shù)據(jù)結構的完整性。這些數(shù)據(jù)結構檢查可用 DBCC CHECKDB 和 DBCC CHECKTABLE 執(zhí)行。
DBCC CHECKCONSTRAINTS 返回帶有下面列的行集。
列名 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
Table Name | varchar | 表的名稱。 |
Constraint Name | varchar | 違反的約束名。 |
Where | varchar | 標識違反約束的行的列值分配。 該列中的值可以用于 SELECT 語句(為查詢違反約束的行)的 WHERE 子句中。 |
例如,orders 表的 DBCC CHECKCONSTRAINT 將產生下列結果。
Table Name Constraint Name Where
----------- ----------------------- -----------------------
orders PartNo_FKey PartNo = '12'
Where 列中的值"PartNo = '12'"可以在識別違反約束"PartNo_FKEY"的行的 SELECT 語句中使用。
Select *
From orders
Where PartNo = '12'
之后,用戶可以決定是否對行進行修改、刪除,或者只進行調整。
DBCC CHECKCONSTRAINTS 權限默認授予 sysadmin 固定服務器角色和 db_owner 固定數(shù)據(jù)庫角色的成員且不可轉讓。
下例檢查 pubs 數(shù)據(jù)庫中 orders 表的約束完整性。
DBCC CHECKCONSTRAINTS ('authors')
GO
下例檢查 PartNo_FKey 約束的完整性。約束名稱唯一地標識要聲明的表。
DBCC CHECKCONSTRAINTS ('PartNo_Fkey')
GO
下例檢查當前數(shù)據(jù)庫表上的所有啟用和禁用約束的完整性。
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
GO