データベースのメタデータを取得するために、Sql Server 2005 & 2008 で INFORMATION_SCHEMA ビューを使用しています。
SELECT
PK.TABLE_NAME as 'PK_TABLE_NAME',
FK.TABLE_NAME as 'FK_TABLE_NAME',
C.CONSTRAINT_NAME as 'CONSTRAINT_NAME'
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
WHERE
FK.TABLE_NAME = 'Table_Name'
ただし、テーブルに null 許容の外部キーがある場合、「UNIQUE_CONSTRAINT_NAME」列に一致するエントリがないため、結果には含まれません。
INFORMATION_SCHEMA スキーマのビューを使用して、NULL 許容外部キー (具体的には、参照されるテーブルと列の名前) に関する情報を取得する方法を考え出すのに苦労しています。どうやらインデックスは標準の一部ではないため、ビューには含まれていません。
null許容外部キーに関する情報を取得するためにクエリを変更する方法を知っている人はいますか?
編集
余談ですが、SQL Server Compact Edition には INFORMATION_SCHEMA.INDEXES ビューがあるようです。なぜ CE はこの有用な情報を取得するのでしょうか?!