Foreign Key hierarchia
Napokban volt egy bonyolúltabb adatbázis, ahol foreign key alapján meg kellett nézni a kapcsolódó táblákat. Ez még annyira nem is lenne nehéz, de ha a referált tábla is használ foreign key-t, akkor tovább kell menni és megkeresni a többi hivatkozott táblát is.
Erre az alábbi megoldást használtam:
1DECLARE @tablename sysname = 'Sales'
2
3;WITH CTE AS (
4SELECT
5 o.[object_id],
6 1 AS [Level],
7 CAST(o.[name] AS nvarchar(MAX)) AS [name],
8 fkc.[referenced_object_id]
9FROM
10 sys.objects o
11JOIN
12 sys.foreign_key_columns fkc on fkc.[parent_object_id] = o.[object_id]
13WHERE
14 o.[name] = @tablename
15
16UNION ALL
17
18SELECT
19 A.[referenced_object_id],
20 A.[Level] + 1,
21 CAST(o.[name] + '|' + ob.name AS nvarchar(max)) ,
22 fkc.[referenced_object_id]
23FROM
24 CTE A
25JOIN
26 sys.objects o on A.[object_id] = o.[object_id]
27JOIN
28 sys.objects ob on A.referenced_object_id = ob.[object_id]
29JOIN
30 sys.foreign_key_columns fkc on fkc.[parent_object_id] = o.[object_id]
31)
32SELECT DISTINCT
33 [Level],
34 [name]
35FROM
36 CTE
37ORDER BY
38 [Level] ASC
Nem tökéletes, mert hiányzik a schema vizsgálat és még sok más is, de indulásnak nem is olyan rossz :)