我正在使用 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'
但是,如果我在表上有一个可为空的外键,则它不会包含在我的结果中,因为“UNIQUE_CONSTRAINT_NAME”列没有匹配的条目。
我正在努力研究如何使用 INFORMATION_SCHEMA 模式中的视图获取有关可为空的外键(特别是引用的表和列的名称)的信息。显然索引不是标准的一部分,因此不包含在视图中。
有谁知道我可以如何更改查询以获取有关可为空的外键的信息?
编辑
顺便说一句,SQL Server Compact Edition 似乎有一个 INFORMATION_SCHEMA.INDEXES 视图——为什么 CE 会得到这个有用的信息?!