2010-07-13 21 views

回答

3
SELECT 
K_Table = FK.TABLE_NAME, 
FK_Column = CU.COLUMN_NAME, 
PK_Table = PK.TABLE_NAME, 
PK_Column = PT.COLUMN_NAME, 
Constraint_Name = C.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
) PT ON PT.TABLE_NAME = PK.TABLE_NAME 
---- optional: 
ORDER BY 
1,2,3,4 
WHERE PK.TABLE_NAME='something'WHERE FK.TABLE_NAME='something' 
WHERE PK.TABLE_NAME IN ('one_thing', 'another') 
WHERE FK.TABLE_NAME IN ('one_thing', 'another') 
+1

yikes - 我將保存這個。 – Matt 2010-07-13 20:05:47

+1

這個答案已複製並從這裏粘貼:http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key - 關係數據庫中的每個表的約束名稱/ 我們真的應該相信我們的消息來源 – 2011-12-22 20:04:38

+0

當我下一次發佈一個答案s omeone ...如果我不能證明原始來源。我幫助納粹回來並讓我知道我真的沒有幫助,因爲我應該記下解決方案。嘖。 – 2012-10-21 16:07:25

1
declare @keys table 
( 
    ForeignKey varchar(100), 
    TableName varchar(100), 
    ColumnName varchar(100), 
    ReferenceTableName varchar(100), 
    ReferenceColumnName varchar(100) 
) 
insert @keys 
SELECT f.name AS ForeignKey, 
TableName = OBJECT_NAME(f.parent_object_id), 
ColumnName = COL_NAME(fc.parent_object_id, 
fc.parent_column_id), 
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 

select * from @Keys where TableName='X' and ColumnName='Y' 
相關問題