sql >> データベース >  >> RDS >> Sqlserver

SQL Serverのテーブルのすべてのチェックキーと外部キーの制約を無効にする方法(T-SQLの例)

    以下のコードを使用して、すべてのCHECKを無効にすることができます SQLServerの特定のテーブルの外部キー制約。

    TableNameを置き換えるだけです 該当するテーブルの名前を使用します。

    ALTER TABLE TableName NOCHECK CONSTRAINT ALL
    

    以下は、これを実行して結果を確認する例です。

    例1-制約を確認する

    まず、現在のCHECKを簡単に見ていきます。 データベース内の外部キー制約。それらが有効か無効かを確認します。

    SELECT
      OBJECT_NAME(parent_object_id) AS 'Table',
      name AS 'Constraint',
      is_disabled, 
      is_not_trusted
    FROM sys.foreign_keys
    UNION
    SELECT 
      OBJECT_NAME(parent_object_id),
      name,
      is_disabled, 
      is_not_trusted
    FROM sys.check_constraints;
    

    結果:

    +----------------+-----------------+---------------+------------------+
    | Table          | Constraint      | is_disabled   | is_not_trusted   |
    |----------------+-----------------+---------------+------------------|
    | ConstraintTest | chkPrice        | 0             | 0                |
    | ConstraintTest | chkValidEndDate | 0             | 0                |
    | ConstraintTest | chkTeamSize     | 0             | 0                |
    | Occupation     | chkJobTitle     | 0             | 0                |
    +----------------+-----------------+---------------+------------------+
    

    したがって、現在4つのCHECKがあります データベース内の制約。そのうちの3つはConstraintTest用です。 テーブル。

    is_disabled であるため、すべての制約が有効になっていることがわかります。 0 に設定されています 。

    例2–制約を無効にする

    次に、ConstraintTestのすべての制約を無効にします テーブル:

    ALTER TABLE ConstraintTest 
    NOCHECK CONSTRAINT ALL;
    

    例3–結果を確認する

    ここで、最初の例と同じクエリを実行して結果を確認します。

    SELECT
      OBJECT_NAME(parent_object_id) AS 'Table',
      name AS 'Constraint',
      is_disabled, 
      is_not_trusted
    FROM sys.foreign_keys
    UNION
    SELECT 
      OBJECT_NAME(parent_object_id),
      name,
      is_disabled, 
      is_not_trusted
    FROM sys.check_constraints;
    

    結果:

    +----------------+-----------------+---------------+------------------+
    | Table          | Constraint      | is_disabled   | is_not_trusted   |
    |----------------+-----------------+---------------+------------------|
    | ConstraintTest | chkPrice        | 1             | 1                |
    | ConstraintTest | chkValidEndDate | 1             | 1                |
    | ConstraintTest | chkTeamSize     | 1             | 1                |
    | Occupation     | chkJobTitle     | 0             | 0                |
    +----------------+-----------------+---------------+------------------+
    

    予想どおり、 ConstraintTest の3つの制約すべて テーブルが無効になっています( is_disabled が原因) 列が 1 に設定されている それらの制約について)。

    is_not_trusted に注意してください 列も 1 に設定されます 。これは、特に無効にした制約のいずれかを再度有効にする場合は、重要な考慮事項です。

    制約を再度有効にするときに信頼を復元する方法については、SQLServerでCHECK制約を有効にするときにWITHNOCHECKについて知っておくべきことを参照してください。その記事の情報は外部キーにも適用されます。

    制約を個別に無効にする

    テーブル内のすべての制約を無効にしたくない場合は、個別に無効にすることができます。 SQLServerでCHECK制約を無効にする方法およびSQLServerで外部キーを無効にする方法を参照してください。

    制約を再度有効にする

    テーブルのすべての制約を再度有効にする必要がある場合は、「テーブルのすべてのチェックおよび外部キー制約を有効にする方法」を参照してください。

    それらを個別に再度有効にする必要がある場合は、SQLServerでCHECK制約を有効にする方法およびSQLServerで外部キーを有効にする方法を参照してください。


    1. MySQLで週ごとの成長率を計算する方法

    2. カウントを使用して発生数を見つける

    3. PostgreSQL9.3を使用してCTEUPERTでデフォルト値を生成する

    4. PowerManager.PARTIAL_WAKE_LOCK android