使用information_schema在ms sql server中查找外键

Jay*_*Jay 5 sql-server foreign-keys information-schema sql-server-2008

我正在尝试查找所有具有指向特定表的外键的表.所以我写了这个:

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
Run Code Online (Sandbox Code Playgroud)

对于我正在处理的数据库中的24个外键中的22个,这种工作有90%的时间,或者确切地说.但对于2个FK,unique_constraint_name与table_constraints中的任何名称都不匹配.

名字也有点搞笑.其中一个是"环境指示符",有一个空间.FK指向的字段名为"environment_designator",带有下划线.另一个具有unique_constraint_name"filename is unique",它与我在"from"或"to"表的定义中看到的任何内容都不对应.

是否还有其他地方我应该在unique_constraint_name上寻找匹配?

Joe*_*lli 7

试试这个:

SELECT OBJECT_NAME(parent_object_id), OBJECT_NAME(referenced_object_id)
    FROM sys.foreign_keys
    WHERE referenced_object_id = OBJECT_ID(@mytable)
Run Code Online (Sandbox Code Playgroud)

  • @Jay参见一些附加信息[对INFORMATION_SCHEMA视图情况下](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/the-case-against-information-schema-views.aspx). (2认同)