Gibt es eine Möglichkeit, 135 verschiedene Tabellen in einer einzelnen Abfrage abzufragen?

8

In unserer Datenbank haben wir 135 Tabellen mit einer Spalte namens EquipmentId. Ich muss jede dieser Tabellen abfragen, um festzustellen, ob einer der Geräte eine EquipmentId hat, die einem bestimmten Wert entspricht. Eine Möglichkeit, dies in einer einzigen Abfrage anstelle von 135 separaten Abfragen zu tun?

Vielen Dank.

    
Randy Minder 02.05.2011, 19:20
quelle

6 Antworten

6

Sie suchen entweder nach Dynamic SQL, um Abfragen für alle Tabellen zu generieren, und vereinigen möglicherweise die Ergebnisse oder verwenden etwas wie die undokumentierte sp_MSforeachtable gespeicherte Prozedur.

%Vor%     
mellamokb 02.05.2011, 19:24
quelle
5

Sie können eine Abfrage verwenden, um eine Abfrage zu erstellen:

%Vor%

Kopieren Sie das Ergebnis, entfernen Sie die erste union all und führen Sie die Abfrage aus:)

    
Andomar 02.05.2011 19:25
quelle
1

Ich würde sie in eine temporäre Tabelle oder etwas ähnliches ausgeben:

%Vor%     
Dustin Laine 02.05.2011 19:37
quelle
1

Ich nehme an, dass nicht alle Tabellen in der DB die Spalte EquipmentId haben. Wenn dies eine gültige Annahme ist, würde @ whereand parameter von sp_msforeachtable helfen, die Tabellen zu filtern. Die folgende Abfrage zeigt alle Tabellennamen mit der angegebenen EquipmentId an. Der Tabellenname wird so oft angezeigt, wie viele Zeilen aus dieser Tabelle die angegebene Equipment-ID haben.

%Vor%     
Alex Aza 03.05.2011 05:02
quelle
0

Sie werden wahrscheinlich in diesem Fall auf Dynamic SQL zurückgreifen müssen - die Systemtabellen für alle Tabellen abfragen, die Spalten mit der Bezeichnung EquipmentId haben, und eine dynamische SQL-Anweisung erstellen, die jede Tabelle auf das Vorhandensein der von Ihnen benötigten EquipmentId abfragt .

EDIT: @ Mellamokb scheint viel einfacher - probier das.

    
Ian Pugsley 02.05.2011 19:25
quelle
0

Dies kann mit LEFT JOINs implementiert werden. Zuerst benötigen wir eine Basistabelle, um die bestimmten Werte von Ausrüstungs-IDs, nach denen wir suchen, zu speichern:

%Vor%

Wir können dann die 135 bekannten Tabellen an diese Basistabelle mit ihren jeweiligen [EquipmentID] -Feldern anschließen. Um Kardinalitätsprobleme (Duplizierung) aufgrund einer [EquipmentID] zu vermeiden, die in mehreren Zeilen einer Tabelle auftritt, ist es am besten, eine Unterabfrage zu verwenden, um die Zählungen pro [EquipmentID] für jede der 135 Tabellen zu erhalten.

%Vor%

Dies gibt uns auch eine aussagekräftigere Ergebnismenge, die die Anzahl der Zeilen pro Tabelle für jeden der bestimmten Werte anzeigt, nach denen wir suchen. Unten ist eine Beispielergebnismenge:

%Vor%     
Jett 03.05.2011 06:03
quelle

Tags und Links