Transact-SQL 参考

DBCC CHECKCONSTRAINTS

检查指定表上的指定约束或所有约束的完整性。

语法

DBCC CHECKCONSTRAINTS
    [( 'table_name' | 'constraint_name'
    )]

    [ WITH { ALL_ERRORMSGS | ALL_CONSTRAINTS } ]

参数

'table_name' | 'constraint_name'

是要检查的表或约束。如果指定 table_name,则对该表所有启用的约束进行检查。如果指定 constraint_name,则只对该约束进行检查。如果 table_nameconstraint_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 固定数据库角色的成员且不可转让。

示例
A. 检查表

下例检查 pubs 数据库中 orders 表的约束完整性。

DBCC CHECKCONSTRAINTS ('authors')
GO
B. 检查特定约束

下例检查 PartNo_FKey 约束的完整性。约束名称唯一地标识要声明的表。

DBCC CHECKCONSTRAINTS ('PartNo_Fkey')
GO
C. 检查所有表的所有启用和禁用的约束

下例检查当前数据库表上的所有启用和禁用约束的完整性。

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
GO