特定のテーブルを指す外部キーを持つすべてのテーブルを見つけようとしています。だから私はこれを書いた:
select t1.TABLE_NAME as pointsfrom, t2.TABLE_NAME as pointsto
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS r
join INFORMATION_SCHEMA.TABLE_CONSTRAINTS t1 on t1.CONSTRAINT_NAME=r.CONSTRAINT_NAME
join INFORMATION_SCHEMA.TABLE_CONSTRAINTS t2 on t2.CONSTRAINT_NAME=r.UNIQUE_CONSTRAINT_NAME
where t2.table_name = @mytable
これは、私が取り組んでいるデータベース内の24個の外部キーのうち22個に対して、90%の時間、正確には機能します。ただし、2つのFKの場合、unique_constraint_nameはtable_constraintsのどの名前とも一致しません。
名前も少しおかしいです。そのうちの一つは、スペースのある「環境指定子」です。FKが指すフィールドの名前は「environment_designator」で、アンダースコアが付いています。もう1つは、「filenameisunique」のunique_constraint_nameを持っています。これは、「from」または「to」テーブルの定義に表示されるものに対応していません。
unique_constraint_nameで一致するものを探す必要がある場所は他にありますか?