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

クエリ データは temp テーブルに格納されます。指定したすべてのテーブルまたは制約がチェックされた後、結果セットが返されます。

DBCC CHECKCONSTRAINTS では、FOREIGN KEY 制約と CHECK 制約の整合性はチェックされますが、テーブルのディスク上のデータ構造に関する整合性はチェックされません。このようなデータ構造のチェックは、DBCC CHECKDB および DBCC CHECKTABLE で実行できます。

結果セット

DBCC CHECKCONSTRAINTS では、次の列を含む行セットが返されます。

列名

データ型

説明

テーブル名

varchar

テーブルの名前。

Constraint Name

varchar

違反している制約の名前。

Where

varchar

制約に違反している 1 つ以上の行を識別する列値の割り当て。

この列の値は、制約に違反する行をクエリする 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