DBCC CHECKCONSTRAINTS (Transact-SQL)
檢查目前資料庫中之指定資料表的指定條件約束或所有條件約束的完整性。
適用於:SQL Server (SQL Server 2008 至目前版本)。 |
語法
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.檢查資料表
下列範例會檢查 AdventureWorks 資料庫中 Table1 資料表的條件約束完整性。
USE AdventureWorks2012;
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 AdventureWorks2012;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C.檢查所有資料表之所有已啟用和停用的條件約束
下列範例會檢查目前資料庫中所有資料表之所有已啟用和停用之條件約束的完整性。
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO