Created
December 3, 2019 16:32
-
-
Save wbhinton/759f1fd54528d8061b3a4047df734cc4 to your computer and use it in GitHub Desktop.
Get the table hierarchical dependencies in a database.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- How to find the hierarchical dependencies | |
-- Solve recursive queries using Common Table Expressions (CTE) | |
WITH | |
TableHierarchy ( ParentTable, DependentTable, Level ) | |
AS | |
( | |
-- Anchor member definition (First level group to start the process) | |
SELECT DISTINCT | |
CAST(NULL AS INT) AS ParentTable , | |
e.referenced_object_id AS DependentTable , | |
0 AS Level | |
FROM sys.foreign_key_columns AS e | |
WHERE e.referenced_object_id NOT IN ( | |
SELECT parent_object_id | |
FROM sys.foreign_key_columns ) | |
-- Add filter dependents of only one parent table | |
-- AND Object_Name(e.referenced_object_id) = 'User' | |
UNION ALL | |
-- Recursive member definition (Find all the layers of dependents) | |
SELECT --Distinct | |
e.referenced_object_id AS ParentTable , | |
e.parent_object_id AS DependentTable , | |
Level + 1 | |
FROM sys.foreign_key_columns AS e | |
INNER JOIN TableHierarchy AS d | |
ON ( e.referenced_object_id ) = | |
d.DependentTable | |
) | |
-- Statement that executes the CTE | |
SELECT DISTINCT | |
OBJECT_NAME(ParentTable) AS ParentTable , | |
OBJECT_NAME(DependentTable) AS DependentTable , | |
Level | |
FROM TableHierarchy | |
ORDER BY Level , | |
ParentTable , | |
DependentTable; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment