5

特定のテーブルを指す外部キーを持つすべてのテーブルを見つけようとしています。だから私はこれを書いた:

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で一致するものを探す必要がある場所は他にありますか?

4

1 に答える 1

7

これを試して:

SELECT OBJECT_NAME(parent_object_id), OBJECT_NAME(referenced_object_id)
    FROM sys.foreign_keys
    WHERE referenced_object_id = OBJECT_ID(@mytable)
于 2011-11-10T22:37:54.907 に答える