外部キーの依存関係の順序で SQL Server のテーブル名を取得するクエリを作成するにはどうすればよいですか?
他の 2 つのテーブルに外部キー制約があるプライマリ テーブルであるテーブル XYZ がある場合、テーブル XYZ を最初に表示する必要があります。
これは、テーブルを正しい順序で作成できるようにするためです。
外部キーの依存関係の順序で SQL Server のテーブル名を取得するクエリを作成するにはどうすればよいですか?
他の 2 つのテーブルに外部キー制約があるプライマリ テーブルであるテーブル XYZ がある場合、テーブル XYZ を最初に表示する必要があります。
これは、テーブルを正しい順序で作成できるようにするためです。
select * from sys.tables st
join sys.foreign_keys sfk on st.object_id = sfk.parent_object_id
where sfk.name = 'Foreign_Key'
このクエリは、依存関係の順序でテーブルを返します。
;WITH vwTableDependancy AS (
SELECT
tables.object_id Dependant , NULL Parent
FROM
sys.tables
LEFT OUTER JOIN
sys.foreign_keys
ON
foreign_keys.parent_object_id = tables.object_id
WHERE
foreign_keys.parent_object_id IS NULL
UNION
SELECT
parent_object_id Dependant, referenced_object_id Parent
FROM
sys.foreign_keys
)
, vwTableHierarchy AS (
SELECT Dependant,Parent, 0 lvl FROM vwTableDependancy WHERE Parent IS NULL
UNION ALL
SELECT
vwTableDependancy.Dependant,vwTableDependancy.Parent , lvl+1
FROM
vwTableDependancy
INNER JOIN
vwTableHierarchy
ON
vwTableDependancy.Parent = vwTableHierarchy.Dependant
)
SELECT
OBJECT_NAME(Dependant) Dependant
,OBJECT_NAME(Parent) Parent
, lvl
FROM
vwTableHierarchy
ORDER BY
lvl ASC
OPTION(MAXRECURSION 0)
次の表で必要な情報を見つけることができます。
select * from sys.tables
select * from sys.foreign_keys
select * from sys.foreign_key_columns
そこから、必要に応じて実行するスクリプトを作成します。