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

SQL Serverで信頼できないすべてのCHECK制約を返す方法(T-SQLの例)

    信頼できないすべてのCHECKのリストを返す必要がある場合 SQL Serverデータベースの制約については、以下のT-SQLコードを実行できます。

    「信頼できない」とは、is_not_trustedを持つ制約を指します フラグを1に設定 。

    例1-信頼できないチェック制約のみを返す

    このクエリは、信頼できないCHECKのみを返します 現在のデータベースの制約。

    SELECT 
      OBJECT_NAME(parent_object_id) AS 'Table',
      name AS 'Constraint',
      is_disabled,
      definition
    FROM sys.check_constraints
    WHERE is_not_trusted = 1;
    

    結果:

    +----------------+-----------------+---------------+-------------------------------+
    | Table          | Constraint      | is_disabled   | definition                    |
    |----------------+-----------------+---------------+-------------------------------|
    | ConstraintTest | chkPrice        | 0             | ([Price]>(0))                 |
    | ConstraintTest | chkValidEndDate | 1             | ([EndDate]>=[StartDate])      |
    | Occupation     | chkJobTitle     | 1             | ([JobTitle]<>'Digital Nomad') |
    +----------------+-----------------+---------------+-------------------------------+
    

    このクエリは、制約名、適用されるテーブルの名前、および制約の定義を返します。

    また、is_disabledを返します 桁。これにより、制約が現在有効になっているか無効になっているかがわかります。制約を有効にすることはできますが、同時に信頼できないため、これを知っておくことが重要です。

    sys.check_constraintsにクエリを実行します システムビュー。 WHEREであるため、信頼できない制約のみが返されることがわかっています。 句は、is_not_trustedを持つ行のみを指定します 列を1に設定 。

    信頼できるすべてを返却したい場合 CHECK 制約がある場合は、1を変更するだけです。 0へ 。

    例2–信頼ステータスを返す

    ここでもまたですが、今回はdefinitionを交換します is_not_trustedの列 列:

    SELECT 
      OBJECT_NAME(parent_object_id) AS 'Table',
      name AS 'Constraint',
      is_disabled,
      is_not_trusted
    FROM sys.check_constraints
    WHERE is_not_trusted = 1;
    

    結果:

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

    is_not_trustedを含めるのはおそらく不要です 列ですが、少なくとも、有効な制約がまだ信頼できない可能性があるという事実を繰り返すのに役立ちます。

    例3–すべてのチェック制約を返す

    次のクエリはすべてを返します CHECK 現在のデータベースの制約(信頼できないデータベースだけでなく):

    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             | 1                |
    | ConstraintTest | chkValidEndDate | 1             | 1                |
    | ConstraintTest | chkTeamSize     | 0             | 0                |
    | Occupation     | chkJobTitle     | 1             | 1                |
    +----------------+-----------------+---------------+------------------+
    

    is_not_trustedの詳細な説明(および例)については フラグについては、SQLServerでCHECK制約を有効にするときにWITHNOCHECKについて知っておくべきことを参照してください。


    1. SQLクエリの履歴を調べる

    2. PostgreSQLでSequelgemを使用して配列を挿入する

    3. SQLデータベーステーブルのn番目の行を選択するにはどうすればよいですか?

    4. ループせずにphpとmysqlを使用してスコアテーブルから誰かの「ランク」を取得する最善の方法