2009-01-14 7 views

Répondre

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

Si vous voulez que les noms de colonnes trop (merci alex): SELECT o2.name, column (rkeyid, rquie) comme referenced_column_name DE sysobjects o INNER JOIN sysforeignkeys fk sur o.id = fk.rkeyid INNER JOIN sysobjects o2 sur fk.fkeyid = o2.id O WH o.name = 'ATE_Question' –

1

Commencez ici

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 

[modifier] la mise en forme est tout foiré

[Edit2] ne

+0

fermer ... Crédit pour une requête qui fonctionne. Pour une table donnée 'foo', j'ai besoin d'une requête pour générer un ensemble de tables qui ont des clés étrangères pointant vers foo. –

3

Essayez ce 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 

J'ai réécrit légèrement la requête pour vous donner toutes les autres tables qui dépendent d'une table particulière:

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

avec tout le respect dû, qui l'enfer m'a voté ici? Sors toi-même. – alex

2

Les parents et les enfants

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

C'est exactement ce qui a été demandé et puis certains. – StingyJack

+0

Je l'ai couru et il y avait zéro sortie. Aurait dû être un commentaire à ce sujet avant de le marquer. – TamusJRoyce

+1

Si vous l'avez exécuté il n'y avait pas de sortie alors il n'y a pas de clés étrangères définies. –

Questions connexes