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

Byr*_*ock 59 sql-server

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

jsr*_*jsr 108

我用这句话,似乎工作得很好.

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

  • 谨防!`INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS`省略了一些`sys.foreign_keys`返回的外键(在我的例子中,一个外键,`Enforce For Replication`设置为'No`.我最终使用了这个答案:http:// stackoverflow. COM/A /一万四千七百三十一分之一千零六十九万七千二百四十八 (4认同)

S.L*_*ott 10

从理论上讲,这很难.关系模型允许任何字段与任何其他字段相关.实际使用的是由可以使用的所有可能的SELECT语句定义的.

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

但是,由于SELECT语句可以连接任何内容,因此除非您还拥有所有 SELECT语句,否则无法保证您拥有所有 FK .


编辑.

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

可能会为你工作.


Pri*_*cey 7

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

SELECT * FROM sys.foreign_keys
Run Code Online (Sandbox Code Playgroud)

也就是说,如果您至少使用SQL Server 2005+并希望查看FK名称列表.

但是你可能想要了解更多关于相关表格的信息,不是吗,这就是答案派上用场的地方.