DBCC CHECKCONSTRAINTS (Transact-SQL)

檢查目前資料庫中之指定資料表的指定條件約束或所有條件約束的完整性。

主題連結圖示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 CHECKDBDBCC CHECKTABLE 來執行這些資料結構檢查。

結果集

DBCC CHECKCONSTRAINTS 會傳回含有下列資料行的資料列集。

資料行名稱

資料類型

描述

Table Name

varchar

資料表的名稱。

Constraint Name

varchar

違反的條件約束名稱。

Where

varchar

用來識別違反條件約束的一或多個資料列的資料行值指派。

在查詢違反條件約束的資料列之 SELECT 陳述式的 WHERE 子句中,可以使用這個資料行中的值。

權限

需要 sysadmin 固定伺服器角色或 db_owner 固定資料庫角色中的成員資格。

範例

A. 檢查資料表

下列範例會檢查 AdventureWorks 資料庫中 Table1 資料表的條件約束完整性。

USE AdventureWorks;
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 AdventureWorks;
GO
DBCC CHECKCONSTRAINTS ("Production.CK_ProductCostHistory_EndDate");
GO

C. 檢查所有資料表之所有已啟用和停用的條件約束

下列範例會檢查目前資料庫中所有資料表之所有已啟用和停用之條件約束的完整性。

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO