是否有可能列出数据库中的所有外键?

如何在sqlserver数据库中列出所有的FK?

我用这个说法,似乎工作得很好。

SELECT RC.CONSTRAINT_NAME FK_Name , KF.TABLE_SCHEMA FK_Schema , KF.TABLE_NAME FK_Table , KF.COLUMN_NAME FK_Column , RC.UNIQUE_CONSTRAINT_NAME PK_Name , KP.TABLE_SCHEMA PK_Schema , KP.TABLE_NAME PK_Table , KP.COLUMN_NAME PK_Column , RC.MATCH_OPTION MatchOption , RC.UPDATE_RULE UpdateRule , RC.DELETE_RULE DeleteRule FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME 

理论上这很难。 关系模型允许任何领域涉及到任何其他领域。 实际使用的是由所有可能的SELECT语句定义的。

实际上,这取决于有多less表包含FK定义。 如果有人打扰仔细定义所有的FK引用 – 并且SELECT语句遵守这些规则 – 您可以查询它们。

但是,由于一个SELECT语句可以连接任何东西,所以不能保证你拥有所有的 FK,除非你拥有所有的 SELECT语句。


编辑

http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/11/26/viewing-all-foreign-key-constraints-in-sql-server.aspx

 SELECT f.name AS ForeignKey, OBJECT_NAME(f.parent_object_id) AS TableName, COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName, OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id 

可能为你工作。

我使用http://technet.microsoft.com/en-us/library/ms189807.aspx

 SELECT * FROM sys.foreign_keys 

这就是说,如果你至less在SQL Server 2005+上,并希望看到FK名字的列表。

但是你可能想更多地了解与之相关的表格,难道你不是这样的答案吗?

您也可以在SQL Server 2005之后使用规范的INFORMATION_SCHEMA模式:

如何在SQL Server中查找外键依赖关系?

这将在另一个数据库中工作。

这是一个更丰富的呈现方式

 SELECT DISTINCT PARENT_TABLE = RIGHT(Replace(TC.constraint_name, 'FK_', ''), Len(Replace(TC.constraint_name, 'FK_', '')) - Charindex('_', Replace(TC.constraint_name, 'FK_', ''))), CHILD_TABLE = TC.table_name, CU.column_name, TC.constraint_name, TC.constraint_type FROM information_schema.table_constraints TC INNER JOIN information_schema.constraint_column_usage CU ON TC.constraint_name = CU.constraint_name WHERE TC.constraint_type LIKE '%foreign' OR TC.constraint_type LIKE '%foreign%' OR TC.constraint_type LIKE 'foreign%'