检查指定表上的指定约束或所有约束的完整性。
DBCC CHECKCONSTRAINTS
[( 'table_name' | 'constraint_name'
)]
[ WITH { ALL_ERRORMSGS | ALL_CONSTRAINTS } ]
'table_name' | 'constraint_name'
是要检查的表或约束。如果指定 table_name,则对该表所有启用的约束进行检查。如果指定 constraint_name,则只对该约束进行检查。如果 table_name 和 constraint_name 都没有指定,将检查当前数据库中所有表上启用的约束。
约束名称唯一地标识其所属的表。有关更多信息,请参见使用标识符。
ALL_CONSTRAINTS
如果指定了表名或检查所有的表,则对表上所有启用及禁用的约束进行检查。否则,只检查启用的约束。如果指定了约束名,则 ALL_CONSTRAINTS 无效。
ALL_ERRORMSGS
返回所检查的表中违反约束的所有行。默认为前 200 行。
DBCC CHECKCONSTRAINTS 构造并执行一个对表的所有外键约束和检查约束的查询。
例如,外键查询可有如下形式:
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 检查外键和已检查的约束的完整性,但并不检查表的磁盘上数据结构的完整性。这些数据结构检查可用 DBCC CHECKDB 和 DBCC CHECKTABLE 执行。
DBCC CHECKCONSTRAINTS 返回带有下面列的行集。
列名 | 数据类型 | 描述 |
---|---|---|
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 固定数据库角色的成员且不可转让。
下例检查 pubs 数据库中 orders 表的约束完整性。
DBCC CHECKCONSTRAINTS ('authors')
GO
下例检查 PartNo_FKey 约束的完整性。约束名称唯一地标识要声明的表。
DBCC CHECKCONSTRAINTS ('PartNo_Fkey')
GO
下例检查当前数据库表上的所有启用和禁用约束的完整性。
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
GO