2013-10-21 147 views
2

我需要獲取數據庫中所有外鍵的列表。該列表必須包含引用表和列,引用的表和列,約束名稱和(對於組合鍵)複合外鍵內引用列的位置。複合外鍵

由於提前,

+3

你有什麼嘗試嗎? – Kaf

回答

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>' 
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

+0

莫霍的代碼具有列所需的序數位置。 – user2135970