2010-03-29 9 views
12

Ich arbeite an einer Entwicklung mit über 700 Tabellen. Ich muss eine Liste aller verwandten Tabellen zu einer bestimmten Tabelle sehen. Kannst du eine App empfehlen, die so etwas bieten kann?Alle verwandten Tabellen zu einer gegebenen Tabelle finden

+2

Welche Version/Marke von SQL? Wenn es von Microsoft ist, kann Management Studio ein Diagramm erstellen ... –

Antwort

15

Wenn Ihre Datenbank die Informationen Schema Ansichten (die meisten tun) unterstützt, können Sie diese Abfrage ausführen:

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 

Dies wird Ausgabe eine Liste aller Referenzrandbedingungen (Fremdschlüssel), die Quelle (Referenzierung) Tabelle/Spalte und Primärschlüssel (referenzierte Tabelle/Spalte).

Wenn Sie Referenzen sehen möchten auf einen spezifischen Tabelle, fügen Sie einfach:

WHERE ku.TABLE_NAME = 'SomeTable' 
+1

Ist es möglich, einen einzelnen Datensatz und alle zugehörigen Datensätze auf diese Weise in SQL Server auszuwählen? – codemonkeyliketab

+0

@codemonkeyliketab die wichtigen Fragen stellend – Kristopher

5

auf dem Datenbankprodukt Je sollten Sie in der Lage sein, die INFORMATION_SCHEMA Ansichten zur Abfrage etwa so:

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 kann eine reverse engineering ein Datenbankschema für eine Vielzahl von Datenbanken (über ODBC) und bietet ein Diagramm, das sehr flexibel ist.

Hinweis: Unabhängig davon, welches System Sie verwenden, möchten Sie nicht alle 700 Tabellen auf einmal erfassen. Versuchen Sie, mehrere Diagramme logisch gruppiert und getrennt zu erstellen. Hoffentlich wird es viele solcher Gruppierungen in einer so großen Datenbank geben.

+0

Leider wurde dieses tolle Feature im Jahr 2013 fallen gelassen. 2010 war die letzte Version mit ihm. – jleach

-1

Sie können dies versuchen:

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

Einfache und einfachste Lösung, die Tabellen der angegebenen Tabelle mit eingebauter Prozedur zu erhalten.

exec sp_fkeys 'Your_PK_TABLE_NAME' 
+0

Große Antwort ... – brijrajsinh

+0

Falsche Syntax in der Nähe von 'GO'. Wo gehe ich hier falsch? –

+1

@Marimba, bitte entfernen Sie die Go; aus Anweisung und ausführen. –

Verwandte Themen