Wie finden Sie Fremdschlüsselabhängigkeiten einer bestimmten Zeile?

8

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)

    
Kirk Woll 30.09.2011, 21:12
quelle

3 Antworten

15

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.

%Vor%

Die erzeugten SELECT-Anweisungen:

%Vor%

und die Abfrageergebnisse:

%Vor%     
Jeff Ogata 30.09.2011, 22:13
quelle
4

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.

  1. Erstellen Sie die temporäre Tabelle #t mit den Spalten FK_TBL_NM , FK_CLMN_VAL .
  2. Es sollte nicht schwierig sein, alle fk-Beziehungen für pk von TableA zu bekommen:

    %Vor%
  3. 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.

  4. 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 , ...

enthält

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:)

    
Filip Popović 30.09.2011 21:43
quelle
2

Um herauszufinden, welche FK-Beziehungen existieren, müssen Sie die sys -Katalogansichten in SQL Server untersuchen - etwa wie folgt:

%Vor%

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:

%Vor%     
marc_s 30.09.2011 21:18
quelle

Tags und Links