すべてのCHECK
のリストを返す必要がある場合 SQL Serverデータベースで無効にされている制約については、以下のT-SQLコードを実行できます。
例1-無効なチェック制約のみを返す
このクエリは、無効になっているCHECK
のみを返します 現在のデータベースの制約。制約名、適用されるテーブルの名前、および制約の定義を返します。
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', definition FROM sys.check_constraints WHERE is_disabled = 1;
結果:
+----------------+-----------------+-------------------------------+ | Table | Constraint | definition | |----------------+-----------------+-------------------------------| | ConstraintTest | chkValidEndDate | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+-------------------------------+
これは、sys.check_constraints
にクエリを実行します システムビュー。 WHERE
であるため、無効な制約のみが返されることがわかっています。 句は、is_disabled
を持つ行のみを指定します 列を1
に設定 。
すべての有効を返したい場合 CHECK
制約がある場合は、1
を変更するだけです。 0
へ 。
例2–すべてのチェック制約を返す
次のクエリはすべてを返します CHECK
現在のデータベースの制約(無効になっているデータベースだけではありません)。今回はis_disabled
を返します 前のクエリがその値をどこから取得したかを示すための列:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
結果:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
is_not_trusted
も含めました このクエリの列。制約は、再度有効にした後でも信頼できないままになる可能性があるため、この値に注意することをお勧めします。このフラグの詳細な説明(および例)については、SQLServerでCHECK制約を有効にするときにWITHNOCHECKについて知っておくべきことを参照してください。