Update alle SQL-NULL-Werte in mehreren Spalten mit Column level WHERE-Klausel?
Haben wir eine Datenbank mit einer Reihe von breiten Tabellen (40-80 Spalten) und nur einen Fehler gefunden, die vorgestellt werden NULL-Werte in über 500 Datensätze. Die können NULL-Werte erscheinen in einer der Spalten (alle integer-Spalten, siehe Bild unten), aber diese NULL-Werte führen zu Problemen mit einem unserer reporting-Systeme, die nicht einfach gewechselt werden. Wir müssen ersetzen Sie die NULL-Werte mit einem bestimmten statischen Wert (in diesem Fall 99), aber da diese änderung gemacht werden muss pro Spalte Grundlage für über 250 verschiedene Spalten möchte ich lieber nicht schreiben, individuelle TSQL-Skripts aktualisieren jede Spalte einzeln.
Mein Gehirn ist zu gebratenem jetzt zu denken, bis eine clevere Lösung, also meine Frage ist wie kann ich diese Aufgabe ausführen, die auf alle Spalten auf eine Tabelle (oder besser noch mehreren Tischen) mit einer einfachen und lesbaren SQL-Abfrage. Ich kann isolieren, die Datensätze einfach genug, mit einer Kette von WHERE (Answer_1 IS NULL) OR (Answer_2 IS NULL) OR ...
oder sogar durch AdministrationID zahlen Sie für jede Tabelle, aber dieser trick wird nicht funktionieren, wenn die Aktualisierung als where-Klausel ist pro Zeile, nicht pro Spalte. Irgendwelche Ratschläge?
Hier ist eine Beispiel-Abfrage zeigt ein paar Sätze aus 4 verschiedenen Tabellen:
- Das tut weh, echt schlimm.
- Ich glaube, ich würde hinzufügen einer not null-Einschränkung mit einem Standardwert von 99 auf jeder Spalte?
- Ich schaue ihn an und Frage mich, warum die Spalten sind jedoch nicht die folgenden: AdministrationID, InstrumentID, AnswerID, Wert. Heck, könnten Sie sogar fügen Sie eine andere id, so dass Sie merge-Tabellen in 1...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keine Konvention zu diesem-wenn Sie wollen, nur der Prozess zeichnet auf, wo die jeweiligen Spalten NULL sind, müssen Sie verwenden:
Aber man könnte dies in der UPDATE-Anweisung:
Die Logik ist, dass der Wert aktualisiert, 99 nur, wenn der Wert der Spalte NULL ist, weil, wie COALESCE funktioniert-die Rückkehr der ersten nicht-NULL-Wert (Verarbeitung der Liste von Links nach rechts).
CASE
Aussage... O_oAnswer_
- format, so Greg sollte in der Lage sein, um bash aus die Skripte in Excel ziemlich schnellDa Sie alle über dem Platz, ich schrieb einige javascript zu helfen, erstellen Sie die sql. schneiden Sie und fügen Sie diesen in Ihre Browser-Adressleiste, um Ihre sql.
Einfach eine Umfrage der sys.Spalten-Tabelle für jede Tabelle, und erstellen Sie eine dynamische sql... Es ist brute-force, aber es erspart Ihnen das schreiben von t-sql aus.
Beispiel:
Ich weiß nicht, wie die Idee, die Daten Bearbeiten, die sich zum Zweck der Berichterstattung. Wenn Sie die NULL-Werte auf 99 zu machen, Ihre Berichterstattung dann leichter, das halte ich, dass die Daten als beschädigt. Was ist, wenn es gibt andere Verbraucher-abgesehen von der Berichterstattung, die brauchen echte Daten?
Ich würde eher schreiben eine intelligente Abfrage für den Bericht. Zum Beispiel, wenn Sie verwenden Sie ISNULL(columnname, 99), würde es wieder 99, wenn der Wert der Spalte ist NULL.