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

SQL Serverで無効になっているすべての外部キー制約を返す方法(T-SQLの例)

    SQL Serverデータベースで無効にされているすべての外部キー制約のリストを返す必要がある場合は、以下のT-SQLコードを実行できます。

    例1-無効な外部キー制約のみを返す

    このクエリは、現在のデータベースで無効になっている外部キー制約のみを返します。この例では、制約の名前と、その無効で信頼できるステータスのみを返します。

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

    結果:

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

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

    有効のみを返したい場合 外部キー制約については、1を変更するだけです。 0へ 。

    is_not_trustedに注意してください フラグも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_disabled = 1;
    

    結果:

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

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

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

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

    結果:

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

    1. Mysql ::Error:指定されたキーが長すぎました。キーの最大長は1000バイトです

    2. WindowsにMySQLをインストールするためのステップバイステップガイド

    3. OmniDBを使用してPostgreSQL12のパフォーマンスを監視する方法–パート1

    4. 行の値をCSVにマージします(SQL Serverの場合はGROUP_CONCATとも呼ばれます)