2009-01-14 11 views

Respuesta

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 desea que los nombres de columna también (gracias Alex): SELECT o2.name, col_name (rkeyid, rkey) como REFERENCED_COLUMN_NAME DE sysobjects o INNER JOIN sysforeignkeys fk en o.id = fk.rkeyid INNER JOIN sysobjects o2 en fk.fkeyid = o2.id WHERE o.name = 'ATE_Question' –

1

de inicio aquí

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 

[editar] formato es todo en mal estado

[Edit2] ya

+0

cerca ... de crédito para una consulta que trabaja. Para una tabla dada 'foo', necesito una consulta para generar un conjunto de tablas que tienen claves foráneas que apuntan a foo. –

3

sin Pruebe este 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 

tengo reescribió la consulta ligeramente para darle todas las otras tablas que dependen de una tabla en particular:

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

con todo el respeto, ¿quién diablos me votó aquí? Fuera usted mismo. – alex

2

padres e hijos

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

Esto es exactamente lo que se pidió y algo más. – StingyJack

+0

Lo ejecuté y no hubo salida. Debería haber un comentario sobre esto antes de marcarlo. – TamusJRoyce

+1

Si lo ejecutó y no hubo salida, no hay claves externas definidas. –

Cuestiones relacionadas