2009-01-14 91 views

回答

7
SELECT o2.name 
FROM sysobjects o 
INNER JOIN sysforeignkeys fk on o.id = fk.rkeyid 
INNER JOIN sysobjects o2 on fk.fkeyid = o2.id 
WHERE o.name = 'foo' 
1

從這裏開始

SELECT cons.TABLE_NAME 
    , cons.CONSTRAINT_NAME PK_NAME 
    , cols.COLUMN_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS cons 
LEFT join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cols 
ON cons.CONSTRAINT_NAME = cols.CONSTRAINT_NAME 
WHERE cons.CONSTRAINT_TYPE = 'foreign KEY' 
ORDER BY cons.TABLE_NAME 
    , cons.CONSTRAINT_NAME 
    , cols.COLUMN_NAME 

[編輯]格式是全亂了

[EDIT2]不再

+0

關閉...信用爲一個可行的查詢。 對於給定的表'foo',我需要一個查詢來生成一組具有指向foo的外鍵的表。 – 2009-01-14 20:32:33

3

試試這個T-SQL:

select col_name(fkeyid, fkey) as column_name, object_name(rkeyid) as referenced_table_name, col_name(rkeyid, rkey) as referenced_column_name from sysforeignkeys where object_name(fkeyid) = 'tableNameHere' order by constid 

我已經稍微改寫查詢以給你所有依賴特定表格的其他表格:

select object_name(fkeyid), 
col_name(fkeyid, fkey) as column_name, 
col_name(rkeyid, rkey) as referenced_column_name 
from sysforeignkeys 
where object_name(rkeyid) = 'tableNameHere' 
order by constid 
+0

有什麼應有的尊重,誰在這裏把我投給了我?你自己。 – alex 2009-01-14 20:51:38

2

家長和孩子

/* this will find out all of the foreign key references for a table*/ 

DECLARE @tableName varchar(128) 
SET @tableName = 'tCounter' 

SELECT 
    pt.[name] AS 'parentTable', 
    ct.[name] AS 'childTable', 
    fk.[name] AS 'fkName', 
* 
FROM sys.foreign_keys fk   
    INNER JOIN sys.tables pt    
     ON pt.object_ID = fk.parent_object_id   
    INNER JOIN sys.tables ct    
     ON ct.object_ID = fk.referenced_object_id 
WHERE pt.name = @tableName  
    OR ct.name = @tableName 
ORDER BY pt.name, ct.name 
+0

這正是要求,然後一些。 – StingyJack 2009-01-14 21:13:40

+0

我跑了它,並沒有輸出。在將其標記之前,應該對此進行評論。 – TamusJRoyce 2011-08-08 14:23:16