2007-11-12

Datenbank-Unabhängug Foreign-Keys in .NET holen.

Wer in .NET etwas mit Datenbanken macht, wird die Methode getSchema(...) kennen.
Leider liefert diese in Bezug auf Foreign-Keys lediglich das solche existieren und für welche Tabellen.
Nicht jedoch welche Spalte hier welche referenziert. Eine längere Suche im Netz färdert am Ende lediglich zu Tage, daß dies über getSchema und co nicht möglich ist und es werden einem an jeder Ecke Möglichkeiten, die nur auf dem MS-SQL-Server funktionieren vorgeschlagen.

Nach stundenlanger Suche habe ich endlich eine Lösung für dieses eigentlich ja triviale Problem gefunden.
Ein asiatischer Blogger welcher eine ASP-FAQ referenziert hat uns eine Monster-Abfrage für die INFORMATION_SCHEMA-Tabellen zusammengebaut.


SELECT
FK_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN
(
SELECT
i1.TABLE_NAME, i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
-- optional:
ORDER BY
1,2,3,4

Keine Kommentare: