检查当前数据库中指定表上的指定约束或所有约束的完整性。
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 | 标识违反约束的行的列值分配。 该列中的值可以用于 SELECT 语句(用于查询违反约束的行)的 WHERE 子句中。 |
要求拥有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。
A. 检查表
以下示例检查 AdventureWorks2008R2 数据库中的 Table1 表的约束完整性。
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
B. 检查特定约束
以下示例检查 CK_ProductCostHistory_EndDate 约束的完整性。
USE AdventureWorks2008R2; GO DBCC CHECKCONSTRAINTS ("Production.CK_ProductCostHistory_EndDate"); GO
C. 检查所有表的所有启用和禁用的约束
以下示例检查当前数据库中所有表上的所有启用和禁用约束的完整性。
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS; GO
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 | 标识违反约束的行的列值分配。 该列中的值可以用于 SELECT 语句(用于查询违反约束的行)的 WHERE 子句中。 |
要求拥有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。
A. 检查表
以下示例检查 AdventureWorks2008R2 数据库中的 Table1 表的约束完整性。
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
B. 检查特定约束
以下示例检查 CK_ProductCostHistory_EndDate 约束的完整性。
USE AdventureWorks2008R2; GO DBCC CHECKCONSTRAINTS ("Production.CK_ProductCostHistory_EndDate"); GO
C. 检查所有表的所有启用和禁用的约束
以下示例检查当前数据库中所有表上的所有启用和禁用约束的完整性。
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS; GO