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

SQL Serverで親テーブル、参照テーブル、外部キー制約の名前と列を取得する方法-SQL Server/TSQLチュートリアルパート71

    シナリオ:

    SQL Server開発者として作業している場合、外部キー制約の定義で使用されるすべての親テーブル、参照テーブル、外部キー制約、および列を返すクエリを提供するように求められます。

    解決策:

    システムビューを使用して、この情報を収集できます。以下のクエリでは、3つの

    システムビュー
    sys.foreign_keys
    sys.foreign_key_columns
    sys.columns

    を使用して回答します。リクエスト。外部キー制約で複合プライマリキー列を使用できるため、FOR XMLパスを使用して行を列に連結し、単一行の列のリストを提供できるようにしました。

    ;With CTE_FK AS (
    SELECT Schema_Name(Schema_id) as TableSchemaName,
      object_name(FK.parent_object_id) ParentTableName,
      object_name(FK.referenced_object_id) ReferenceTableName,
      FK.name AS ForeignKeyConstraintName,c.name as ReferencedColumnList,
      cf.name as ParentColumnName 
           FROM sys.foreign_keys AS FK
           INNER JOIN sys.foreign_key_columns AS FKC
                   ON FK.OBJECT_ID = FKC.constraint_object_id
                   INNER JOIN sys.columns c
              on  c.OBJECT_ID = FKC.referenced_object_id
                     AND c.column_id = FKC.referenced_column_id
                     INNER JOIN sys.columns cf
              on  cf.OBJECT_ID = FKC.parent_object_id
                     AND cf.column_id = FKC.parent_column_id
                     )
                     Select TableSchemaName,
                     ParentTableName,
                     ReferenceTableName,
                     ForeignKeyConstraintName,stuff((
                     Select ','+ParentColumnName
                     from CTE_FK i
                     where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName
                     and i.TableSchemaName=o.TableSchemaName
                     and i.ParentTableName=o.ParentTableName
                     and i.ReferenceTableName=o.ReferenceTableName
                     for xml path('')), 1, 1, '') ParentColumnList
                     ,stuff((
                     Select ','+ReferencedColumnList
                     from CTE_FK i
                     where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName
                     and i.TableSchemaName=o.TableSchemaName
                     and i.ParentTableName=o.ParentTableName
                     and i.ReferenceTableName=o.ReferenceTableName
                     for xml path('')), 1, 1, '') RefColumnList
                     from CTE_FK o
                     group by 
                     tableSchemaName,
                     ParentTableName,
                     ReferenceTableName,
                     ForeignKeyConstraintName


    データベースの1つで上記のスクリプトを実行すると、スキーマ名、親テーブル名、参照テーブル名、外部キー制約名、親列リスト、および制約で使用される参照列リストが出力されます。
    SQL Serverで親テーブル、参照テーブル、外部キー制約名、列リストを取得する方法


    ビデオデモ:SQL Serverで主キーテーブル、外部キーテーブル、および制約名を取得する方法

    1. Postgresで列を複数の行に分割する

    2. バックエンドデータベースが非同期的に変更されたときにJPAエンティティを更新するにはどうすればよいですか?

    3. インデックスの一部ではない外部キーの列に関するAndroidRoomのコンパイル時の警告。どういう意味ですか?

    4. SQLServerの「intをデータ型numericに変換する算術オーバーフローエラー」を修正しました