Update alle Tabellen einer DB

lydiavamos

Benutzer
Beiträge
6
Hallo,

ich komme bei einer Sache nicht so wirklich weiter und auch google hat mich hier nicht so richtig weitergebracht. Vielleicht auch falsch gesucht ;)

Und zwar habe ich eine MSSQL DB mit ca. 200 Tabellen. In manchen, nicht in allen, befindet sich eine Spalte Namens "XYZ". Und hier möchte ich einen Wert ändern, wenn eine bestimmte Bedingung erfüllt ist.

Also kurz und knapp:
Update in der DB "TEST" allen Tabellen welche die Spalte "XYZ" enthält auf den Wert "123" wenn der Wert der Spalte "XYZ" = "HALLO" ist.

Tabellennamen und Werte sind selbstverständlich geändert worden.
Über Eure Hilfe würde ich mich arg freuen.

Gruß
Lydia
 
Werbung:
Hallo,

warum ist das DB-Design fehlerhaft? Die Software funktioniert wunderbar mit der DB. Leider ist es jedoch Notwendig in allen Notwendigen Tabellen einen bestimmten Wert zu ändern. Ich könnte auch alle Tabellen manuell updaten bzw. Explizit ansprechen aber genau dies wollte ich vermeiden. Besteht auch die Möglichkeit eine Tabelle zu vergessen.

Gruß
Lydia
 
Aha, sehe ich zwar nicht so aber okay. Du würdest wahrscheinlich eine Tabelle mit 1.000 Spalten bauen als lieber mehrere Tabellen und diese über einen bestimmten Wert miteinander zu verknüpfen, wenn ich dich korrekt verstanden habe ... hmmmm.

Das Problem besteht jedoch leider dennoch ;)
 
Du würdest wahrscheinlich eine Tabelle mit 1.000 Spalten bauen

Nein.

als lieber mehrere Tabellen und diese über einen bestimmten Wert miteinander zu verknüpfen, wenn ich dich korrekt verstanden habe

Nein.

Ich würde aber auch nicht eine "DB mit ca. 200 Tabellen" bauen, wo ich dann "In manchen, nicht in allen, befindet sich eine Spalte Namens "XYZ". Und hier möchte ich einen Wert ändern," machen will. Ohne Dein DB-Schema gesehen zu haben bin ich mir halt sicher, das es Murks ist. Beweise mir das Gegenteil.
 
Mir geht es hier nur um die Lösung des Problemes und nicht um das DB-Design. Ich möchte wie gesagt einen Wert ändern - ob das nun Sinn macht oder nicht ;)
 
@akretschmer Du kennst doch das Tabellendesign gar nicht, wie willst Du das beurteilen? Bei solchen Aufgabestellungen geht es oft nicht um normale Datenwartung sondern um einen Sonderfall. Und woher willst Du wissen, ob das überhaupt @lydiavamos Design ist und ob sie es überhaupt ändern dürfte?

@ukulele Sehe ich ebenfalls nicht so. Ich würde mir per Zugriff auf das Repository eine Liste der betroffenen Spalten erstellen und daraus ein SQL-Script basteln. Ich bin allerdings bei SQL-Server nicht bewandert genug um die fertige Lösung zu liefern.
 
Und zwar habe ich eine MSSQL DB mit ca. 200 Tabellen. In manchen, nicht in allen, befindet sich eine Spalte Namens "XYZ". Und hier möchte ich einen Wert ändern, wenn eine bestimmte Bedingung erfüllt ist.

Also kurz und knapp:
Update in der DB "TEST" allen Tabellen welche die Spalte "XYZ" enthält auf den Wert "123" wenn der Wert der Spalte "XYZ" = "HALLO" ist.

der einzige Weg, der mir hier einfällt, ist folgender: Du schreibst eine Stored Procedure, die die Katalogtabellen abfragt, welche Tabellen diese Spalte behinhalten. Durch diese Liste gehst Du dann, bildest einen String, der das nötige Update enthält, und führst diesen String dann aus. In PG könnte ich das vorführen, für M$SQL nicht.

Du solltest dennoch prüfen, ob das DB-Design korrekt ist.
 
Werbung:
Erst einmal vielen Dank für die vielen Antworten und Anregungen :)
@Walter In der Tat, ist das Design nicht von mir. Das Grundsätzliche DB-Design wird hier vom Hersteller bzw. von der Software vorgegeben. Daten können jederzeit direkt über die Software geändert werden oder aber auch über die Datenbank. Da es hier um einen Sonderfall handelt, bedarf es leider eine Änderung direkt über die DB, was aber grundsätzlich auch kein Problem darstellt.

@Walter und @Akretschmer_mobile Da es sich um ein vorgegebenes Design handelt, wurden die Namen und Inhalte in der Ursprungsanfrage geändert.
Eure beiden Ideen ind sehr gut ... An ein Stored Procedure habe ich überhaupt nicht gedacht, wäre hier aber tatäschlich ein Weg um alle Notwendigen Tabellen zu filtern.

Grundsätzliches noch einmal ...
Die Software ist Modular und Prozessorientiert aufgebaut und dies spiegelt sich auch im DB-Design wieder. Jede Tabelle hat ihre Berechtigung und ich persönlich empfinde das Design als sehr angenehem. Über das DB-Design lässt sich auch schnell heraufinden, wie die Software im Hintergrund arbeitet und funktioniert. Es gibt viele Tabellen welche über ein bis drei Parametern miteinander verknüpft sind. Dies können Fortlaufende Nummern sein aber auch fixe Namen, welche innerhalb der Software einmal festgelegt wurden. Diese Namen ziehen sich dann als Verknüpfung durch viele Tabellen durch. Ist auch nicht schlimm > Es macht die Wartung der Tabellen / DB sehr angenehm. Durch eine Umstellung ist es jedoch erforderlich, dass einer dieser fixen Namen umbenannt werden muss. Damit halt alle Verknüpfugen wirklich erwischt werden, die Ursprungsanfrage ;)

Aber ich werde es jetzt einaml mit Euren Ideen probieren :)
 
Zurück
Oben