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.
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%Ich würde sie in eine temporäre Tabelle oder etwas ähnliches ausgeben:
%Vor%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%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.
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%Tags und Links sql sql-server tsql