Sql server 在ms sql server中查找包含信息的外键\u架构
我试图找到所有外键指向特定表的表。所以我写了这个:Sql server 在ms sql server中查找包含信息的外键\u架构,sql-server,sql-server-2008,foreign-keys,information-schema,Sql Server,Sql Server 2008,Foreign Keys,Information Schema,我试图找到所有外键指向特定表的表。所以我写了这个: 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 joi
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
这在90%的时间内都有效,确切地说,对于我正在处理的数据库中的24个外键中的22个。但对于2个FK,唯一的\u约束\u名称与表\u约束中的任何名称都不匹配
名字也有点滑稽。其中之一是“环境指示器”,带有空格。FK指向的字段名为“environment_designator”,带有下划线。另一个有一个唯一的名称“filename is unique”,它与我在“from”或“to”表的定义中看到的任何内容都不对应
是否有其他地方我应该在唯一约束名称上查找匹配项?尝试以下方法:
SELECT OBJECT_NAME(parent_object_id), OBJECT_NAME(referenced_object_id)
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID(@mytable)
嗯,这看起来确实有效。我希望有一个使用信息模式的解决方案,因为,(a)我已经在这个应用程序的其他地方使用了信息模式,我希望保持一致;(b)我从未使用过sys目录表,我只是不想进入其中。但有效的东西总是比无效的东西更可取,所以我想我会接受你的解决方案。如果有其他人出现并且知道如何使用信息模式,请发布!我怀疑我是否会切换回sys cat解决方案,但询问者想知道。@Jay See了解更多信息。是的,我想我已经弄明白了。嗯,我怀疑我是否会重做现有的工作代码,我想下一次我只会使用SQL Server特定的对象。我有一个愚蠢的想法,那就是最好使用信息模式,因为这应该是一个行业标准。