复合外键

时间:2013-10-21 16:35:59

标签: sql sql-server-2008

我需要获取数据库中所有外键的列表。此列表必须包括引用表和列,引用的表和列,约束名称,以及(对于复合键)复合外键中引用列的位置。

提前致谢,

2 个答案:

答案 0 :(得分:1)

您可以尝试这样做(来自here): -

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

另请查看 this

答案 1 :(得分:1)

另一种方式(包括字段的顺序位置):

select
    fk.CONSTRAINT_NAME
    , fk.TABLE_NAME FK_Table
    , kcu.COLUMN_NAME FK_Column
    , ptc.TABLE_NAME PK_Table
    , ptKcu.COLUMN_NAME PK_Column
    , kcu.ORDINAL_POSITION
from
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
    inner join INFORMATION_SCHEMA.TABLE_CONSTRAINTS fk
     on rc.CONSTRAINT_NAME = fk.CONSTRAINT_NAME
    inner join INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk
     on rc.UNIQUE_CONSTRAINT_NAME = pk.CONSTRAINT_NAME
    inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
     on rc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME

    inner join INFORMATION_SCHEMA.TABLE_CONSTRAINTS ptc
     on pk.TABLE_NAME = ptc.TABLE_NAME 
     and ptc.CONSTRAINT_TYPE = 'PRIMARY KEY'
    inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE ptKcu
     on ptc.CONSTRAINT_NAME = ptKcu.CONSTRAINT_NAME
        and kcu.ORDINAL_POSITION = ptKcu.ORDINAL_POSITION
--where
--  FK.TABLE_NAME = '<name of table containing foreign key>'