Wenn ich eine Tabelle habe, TableA:
%Vor%Und zwei andere Tabellen:
TabelleB:
%Vor%TableC:
%Vor%Dabei ist TableAId eine FK-Beziehung mit TableA.Id.
Wie stelle ich fest, dass TableA, Id 1, drei Zeilen hat, die darauf zeigen? Und dass TableA, Id 2 eine Zeile darauf zeigt? Und genauer, wie identifiziere ich, was diese Zeilen sind? (ihr Tabellenname und ihre ID)
Sie können die Ansichten INFORMATION_SCHEMA
verwenden, um ausgewählte Anweisungen zum Anzeigen der fraglichen Zeilen zu generieren. Ich habe dies nur mit den in der Frage angegebenen Tabellen getestet, aber es könnte erweitert werden, um in Fällen zu arbeiten, in denen die Schlüssel mehrere Spalten haben.
Die erzeugten SELECT-Anweisungen:
%Vor%und die Abfrageergebnisse:
%Vor%Ich habe kein SQL auf diesem Computer, deshalb kann ich Ihnen keinen genauen Code geben, aber hier ist der Weg, den Sie gehen sollten. Bitte beachten Sie, dass ich SQL Server-Terminologie verwenden werde.
Ich sehe keine Möglichkeit, dies ohne dynamisches SQL zu tun, zumindest in SQL Server.
FK_TBL_NM
, FK_CLMN_VAL
. Es sollte nicht schwierig sein, alle fk-Beziehungen für pk von TableA zu bekommen:
%Vor% Verwenden Sie einen Cursor, um durch das Ergebnis dieser Abfrage zu iterieren und für jedes dynamische sql zu generieren und auszuführen, das TableA
und die vom Cursor abgerufene Tabelle verbindet und FK_TBL_NM
(TableB, TableC, ...) zurückgibt. und Wert der fk-Spalte.
Fügen Sie das Ergebnis in #t ein (es ist schwierig, ein dynamisches sql-Ergebnis in eine Tabelle zu bekommen, aber führen Sie eine Untersuchung über stackoverflow durch)
Nun haben Sie die Tabelle, die für jede Zeile eine Zeile in TableB
, TableC
, ...
Ich weiß, dass dies machbar ist, weil ich den Code mit ähnlicher Logik für mein aktuelles Projekt bei der Arbeit vor ein paar Tagen geschrieben habe.
Beachten Sie, dass Sie Ihren Code wahrscheinlich mit pk / fk mit mehr als einer Spalte arbeiten lassen sollten. Außerdem gibt es verschiedene Datentypen für Spalten. Es kompliziert die Dinge ein bisschen, aber es ist möglich.
Jeder Schritt, den ich oben aufgeführt habe, ist nicht schwer zu implementieren. Wenn Sie jedoch Schwierigkeiten haben, suchen Sie in stackoverflow:)
Um herauszufinden, welche FK-Beziehungen existieren, müssen Sie die sys
-Katalogansichten in SQL Server untersuchen - etwa wie folgt:
Dies listet alle Fremdschlüsselbeziehungen auf, die für TableA
existieren.
Sobald Sie diese Informationen haben, ist es ein ziemlich einfacher JOIN zwischen TableA
und allen anderen beteiligten Tabellen.
Update: sobald Sie wissen, dass z. TableB
und TableC
referenzieren Sie Ihre TableA
, Sie können die dependent Zeilen mit einem einfachen JOIN finden:
Tags und Links sql-server