2010-03-29 11 views
12

Sto lavorando a uno sviluppo con oltre 700 tabelle. Devo vedere un elenco di tutte le tabelle correlate su una tabella specifica. Puoi consigliare un'app che sia in grado di fornire una cosa del genere.Ricerca di tutte le tabelle correlate su una tabella data

+2

Quale versione/marca di SQL? Se è di Microsoft, Management Studio può creare un diagramma ... –

risposta

15

Se il database supporta il punto di vista degli schemi delle informazioni (più fare), allora si può eseguire questa query:

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 

Questa volontà di output un elenco di tutti i vincoli referenziali (chiavi esterne), la sorgente (riferimento) tabella/colonna e tabella/colonna della chiave primaria (di riferimento).

Se volete vedere i riferimenti a un tavolo specifica, basta aggiungere:

WHERE ku.TABLE_NAME = 'SomeTable' 
+1

È possibile selezionare un singolo record e tutti i relativi record in questo modo in SQL Server? – codemonkeyliketab

+0

@codemonkeyliketab che fa le domande importanti – Kristopher

5

A seconda del prodotto di database, si dovrebbe essere in grado di interrogare i INFORMATION_SCHEMA viste in questo 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 può fare un buon lavoro di reverse engineering uno schema db per una varietà di database (tramite ODBC) e fornisce un diagramma che è molto flessibile.

Parola di cautela: indipendentemente dal sistema in uso, non è necessario inserire tutti i 700 tavoli contemporaneamente. Prova a creare diversi diagrammi raggruppati e separati logicamente. Speriamo che ci saranno molti raggruppamenti di questo tipo in un database così grande.

+0

Sfortunatamente questa fantastica funzionalità è stata eliminata nel 2013. Il 2010 è stata l'ultima versione. – jleach

-1

Si può provare questo:

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

semplice e la soluzione più semplice per ottenere le relative tabelle di data tabella utilizzando la procedura integrata.

exec sp_fkeys 'Your_PK_TABLE_NAME' 
+0

Risposta straordinaria ... – brijrajsinh

+0

Sintassi non corretta vicino a "VAI". Dove sto andando storto qui? –

+1

@ Marimba, si prega di rimuovere il Go; da dichiarazione ed esecuzione. –

Problemi correlati