2010-03-29 5 views
12

Je travaille sur un développement avec plus de 700 tables. J'ai besoin de voir une liste de toutes les tables liées à une table donnée. Pouvez-vous recommander une application qui est capable de fournir une telle chose.Trouver toutes les tables liées à une table donnée

+2

Quelle version/marque de SQL? Si c'est Microsoft, Management Studio peut créer un diagramme ... –

Répondre

15

Si votre base de données prend en charge les vues du schéma d'informations (la plupart), vous pouvez exécuter cette requête:

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 

Ceci affichera une liste de toutes les contraintes référentielles (clés étrangères), la source (référencement) table/colonne, et clé primaire (référencée) table/colonne.

Si vous voulez voir des références à une table spécifique , il suffit d'ajouter:

WHERE ku.TABLE_NAME = 'SomeTable' 
+1

Est-il possible de sélectionner un enregistrement unique et tous ses enregistrements connexes de cette façon sur un serveur sql? – codemonkeyliketab

+0

@codemonkeyliketab poser les questions importantes – Kristopher

5

En fonction du produit de base de données, vous devriez être en mesure d'interroger les INFORMATION_SCHEMA vues comme ceci:

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 peut faire un bon travail de rétro-ingénierie d'un schéma db pour une variété de bases de données (via ODBC) et fournit un diagramme qui est très flexible. Avertissement: Quel que soit le système que vous utilisez, vous ne voulez pas tirer toutes les 700 tables en une seule fois. Essayez de créer plusieurs diagrammes groupés et séparés logiquement. Espérons qu'il y aura beaucoup de tels groupements dans une base de données aussi grande.

+0

Malheureusement, cette fonctionnalité impressionnante a été abandonnée en 2013. 2010 était la dernière version avec elle. – jleach

-1

Vous pouvez essayer ceci:

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

simple et solution la plus simple pour obtenir les tables connexes de table donnée en utilisant la procédure intégrée.

exec sp_fkeys 'Your_PK_TABLE_NAME' 
+0

Grande réponse ... – brijrajsinh

+0

Syntaxe incorrecte près de 'GO'. Où vais-je me tromper ici? –

+1

@Marimba, veuillez retirer le Go; de déclaration et exécuter. –

Questions connexes