シナリオ:
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で主キーテーブル、外部キーテーブル、および制約名を取得する方法