2010-03-29 18 views
12

Estoy trabajando en un desarrollo con más de 700 tablas. Necesito ver una lista de todas las tablas relacionadas a una tabla dada. ¿Me puede recomendar una aplicación que pueda proporcionar tal cosa?Encontrar todas las tablas relacionadas en una tabla determinada

+2

¿Qué versión/marca de SQL? Si es de Microsoft, Management Studio puede crear un Diagrama ... –

Respuesta

15

Si su base de datos es compatible con las vistas de esquema de información (la mayoría lo hace), entonces se puede ejecutar esta consulta:

SELECT 
    c.CONSTRAINT_NAME, 
    cu.TABLE_NAME AS ReferencingTable, cu.COLUMN_NAME AS ReferencingColumn, 
    ku.TABLE_NAME AS ReferencedTable, ku.COLUMN_NAME AS ReferencedColumn 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS c 
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu 
ON cu.CONSTRAINT_NAME = c.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku 
ON ku.CONSTRAINT_NAME = c.UNIQUE_CONSTRAINT_NAME 

Esta es la salida de una lista de todas las restricciones de referencia (clave externa), la fuente (referencia) tabla/columna, y tabla/columna de clave principal (referenciada).

Si desea ver referencias a una tabla específica, sólo tiene que añadir:

WHERE ku.TABLE_NAME = 'SomeTable' 
+1

¿Es posible seleccionar un solo registro y todos sus registros relacionados de esta manera en el servidor sql? – codemonkeyliketab

+0

@codemonkeyliketab haciendo las preguntas importantes – Kristopher

5

Dependiendo del producto de base de datos, usted debería ser capaz de consultar los INFORMATION_SCHEMA vistas de este modo:

Select FK.TABLE_SCHEMA, FK.TABLE_NAME 
From INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS As RC 
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As PK 
     On PK.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME 
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As FK 
     On FK.CONSTRAINT_NAME = RC.CONSTRAINT_NAME 
Where PK.TABLE_SCHEMA = 'dbo' 
    And PK.TABLE_NAME = '<target table name>' 
1

MS Visio Pro puede hacer un buen trabajo de ingeniería inversa un esquema db para una variedad de bases de datos (a través de ODBC) y proporciona un diagrama que es muy flexible.

Advertencia: Independientemente del sistema que utilice, no desea extraer todas las 700 tablas a la vez. Intenta crear varios diagramas agrupados y separados lógicamente. Es de esperar que haya muchas agrupaciones de este tipo en una base de datos tan grande.

+0

Lamentablemente, esta característica increíble se eliminó en 2013. 2010 fue la última versión con él. – jleach

-1

Puede probar esto:

SELECT * 
FROM 
    KEY_COLUMN_USAGE 
WHERE 
    REFERENCED_TABLE_NAME = 'your_table_name' 
AND REFERENCED_COLUMN_NAME = 'your_column_id' 
AND TABLE_SCHEMA = 'your_database_name'; 
10

Solución simple y más fácil de obtener los correspondientes cuadros de tabla dada utilizando el procedimiento incorporado.

exec sp_fkeys 'Your_PK_TABLE_NAME' 
+0

Gran respuesta ... – brijrajsinh

+0

Sintaxis incorrecta cerca de 'IR'. ¿Dónde me estoy equivocando aquí? –

+1

@Marimba, Amablemente elimine Go; de declaración y ejecución. –

Cuestiones relacionadas