Dynamisches SQL vermeiden ...

09/06/2010 - 11:54 von Lutz Uhlmann | Report spam
Hallo NG!

Ich habe in einer Datenbank mehrere Tabellen àhnlichen Aufbaus und Namens.

Eine Prozedur soll mit einer dieser Tabellen arbeiten. Welche Tabelle
das sein soll wird über mit einem Parameter angegeben.
Parameter: "ABC" -> "Tabelle_ABC"
Parameter: "DEF" -> "Tabelle_DEF"
In der Prozedur arbeite ich viel mit SELECTs und UPDATES.

Nun müßte ich ja in der Prozedur theoretisch dynamisches SQL verwenden,
was ich aber vermeiden möchte. Für jede Tabelle den Code duplizieren ist
natürlich auch keine Option.

Wie kann ich das am elegantesten lösen???

Meine spontane Idee war ja quasi eine Art temporàre Abfrage
@@Abfrage: 'SELECT * Tabelle_' + Parameter
Temporàre Abfragen gibt es aber nicht, oder? Ich müßte wohl eine normale
Abfrage erstellen - dabei aber beachten, daß für jede Verbindung eine
eigene Abfrage erstellt wird.

Bin für jede Anregung dankbar ...

Lutz
 

Lesen sie die antworten

#1 Josef Poetzl
09/06/2010 - 12:07 | Warnen spam
Hallo!

Lutz Uhlmann schrieb:
Ich habe in einer Datenbank mehrere Tabellen àhnlichen Aufbaus und Namens.


^^^^^^^^^^^^^^^^^^^^^^
... vielleicht liegt da der Grund des Problems. ;-)

Eine Prozedur soll mit einer dieser Tabellen arbeiten. Welche Tabelle
das sein soll wird über mit einem Parameter angegeben.
Parameter: "ABC" -> "Tabelle_ABC"
Parameter: "DEF" -> "Tabelle_DEF"
In der Prozedur arbeite ich viel mit SELECTs und UPDATES.

Nun müßte ich ja in der Prozedur theoretisch dynamisches SQL verwenden,
was ich aber vermeiden möchte.



Mir fàllt auch nichts anderes als die Variante über dynamisches SQL
ein.

wegen:
Parameter: "ABC" -> "Tabelle_ABC"
Parameter: "DEF" -> "Tabelle_DEF"



Falls dieses ABC und DEF so eine Art Gruppe ist, könntest du eventuell
versuchen diese Tabellen in einer gemeinsamen Tabelle zusammenzuführen
und z. B. Tabelle_ABC durch eine Sicht mit dem gleichen Namen
ersetzen, die nach "ABC" filtert. Und wenn du dann noch einen
Insert-Trigger auf die Sicht einrichtest, würde sie auch wie die
aktuelle Tabelle funktionieren ... die Anwendungen die auf
"Tabelle_ABC" zugreifen könnte das auch weiterhin machen.
Im Insert-Trigger müsstest du aber dafür sorgen, dass "ABC" in ein
Datenfeld geschrieben wird, falls die Anwendungen direkt in die
Tabelle Daten einfügen dürfen.

mfg
Josef

Ähnliche fragen