2009-01-14 9 views

Antwort

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

Wenn Sie die Spaltennamen zu (danke alex) wollen: SELECT o2.name, col_name (rkeyid, rkey) als referenced_column_name FROM sysobjects o INNER JOIN sysforeignkeys auf o.id fk fk.rkeyid = INNER JOIN sysobjects o2 auf fk.fkeyid = o2.id WHERE o.name = 'ATE_Question' –

1

starten hier

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 

[Bearbeiten] Formatierung ist alles vermasselt

[edit2] nicht mehr

+0

schließen ... Kredit für eine Abfrage, die funktioniert. Für eine gegebene Tabelle 'foo' brauche ich eine Abfrage, um eine Reihe von Tabellen zu erzeugen, die Fremdschlüssel haben, die auf foo zeigen. –

3

Versuchen Sie dieses 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 

Ich habe Die Abfrage wurde leicht umgeschrieben, um Ihnen alle anderen Tabellen zu geben, die sich auf eine bestimmte Tabelle beziehen:

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

mit allem Respekt, wer zum Teufel hat mich hier gewählt? Mach dich selbst aus. – alex

2

Eltern und Kinder

/* 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

Dies ist genau das, was gefragt wurde und dann einige. – StingyJack

+0

Ich lief es und es gab keine Ausgabe. Sollte dies ein Kommentar gewesen sein, bevor es niedergeschrieben wurde. – TamusJRoyce

+1

Wenn Sie es ausgeführt haben, gab es keine Ausgabe, dann sind keine Fremdschlüssel definiert. –