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

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

    SQL Serverデータベース内のすべての信頼できない外部キー制約のリストを返すには、以下のT-SQLコードを実行できます。

    信頼できない外部キーとは、is_not_trustedを持つ外部キーです。 フラグを1に設定 。

    例1-信頼できない外部キー制約のみを返す

    このクエリは、現在のデータベース内の信頼できない外部キー制約のみを返します。この例では、制約の名前、信頼できるステータス、および有効/無効なステータスのみを返します。

    SELECT 
      name AS 'Constraint',
      is_not_trusted,
      is_disabled
    FROM sys.foreign_keys
    WHERE is_not_trusted = 1;
    

    結果:

    +------------------------+------------------+---------------+
    | Constraint             | is_not_trusted   | is_disabled   |
    |------------------------+------------------+---------------|
    | FK_BandMember_Band     | 1                | 1             |
    | FK_BandMember_Musician | 1                | 0             |
    +------------------------+------------------+---------------+
    

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

    信頼できるのみを返品する場合 外部キー制約については、1を変更するだけです。 0へ 。

    is_disabledも含めました フラグは、制約が現在有効になっているかどうかを示しているためです。制約の1つが有効になっていて、もう1つが有効になっていないことがわかります。

    これは、制約が有効になっている場合でも、制約が信頼できない可能性があるという事実を示しています。これは、制約を有効化(または作成)するときに、有効化する前に既存のデータをチェックするオプションがあるためです。既存のデータをチェックしないことを選択した場合、制約を有効にすると、制約は信頼されないままになります。

    これも同じクエリですが、今回は各制約のテーブルと参照テーブルを含めます。

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

    結果:

    +------------------------+------------+--------------------+---------------+------------------+
    | Constraint             | Table      | Referenced Table   | is_disabled   | is_not_trusted   |
    |------------------------+------------+--------------------+---------------+------------------|
    | FK_BandMember_Band     | BandMember | Band               | 1             | 1                |
    | FK_BandMember_Musician | BandMember | Musician           | 0             | 1                |
    +------------------------+------------+--------------------+---------------+------------------+
    
    >

    例2–すべての外部キー制約を返す

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

    SELECT 
      name AS 'Constraint',
      is_not_trusted,
      is_disabled
    FROM sys.foreign_keys;
    

    結果:

    +--------------------------------+------------------+---------------+
    | Constraint                     | is_not_trusted   | is_disabled   |
    |--------------------------------+------------------+---------------|
    | FK_BandMember_Band             | 1                | 1             |
    | FK_BandMember_Musician         | 1                | 0             |
    | FK_MembershipPeriod_BandMember | 0                | 0             |
    +--------------------------------+------------------+---------------+
    

    1. oracle plsqlトリガーを使用して誕生日から年齢を計算し、年齢を表に挿入します

    2. MariaDBでJSON配列から要素を返す方法

    3. ビバリーヒルズ90210およびZIP+4:データモデルでの住所の処理

    4. 無効な列名のSQLエラー