Löschen von Zeilen, bei denen mehrere Spalten NULL-Werte aufweisen
Recht häufig sind die Daten in Tabellen nur unvollständig gefüllt und es ist oftmals
recht aufwendig fehlerhafte Daten aufzuspüren. Ein Ansatzpunkt kann sein, Zeilen zu ermitteln, in
denen die meisten Zeilen nur NULL-Werte aufweisen.
Wie kann man nun ermitteln, welche Zeilen einer Tabelle z.B. in mehr als 4 Spalten NULL-Werte enthalten?
Eine Abfrage nach dem Muster SELECT * FROM tabelle WHERE spalte1 IS NULL AND spalte2 IS NULL AND...
wird schnell zu kompliziert. Einfacher lässt sich dieses Problem mit einer CASE-Anweisung lösen.
Für jede Spalte die einen NULL-Wert enthält wird der Zähler um eins erhöht.
Für eine einfache Tabelle mit vier Spalten könnte der SELECT in etwa so aussehen:
SELECT * FROM tabelle WHERE CASE WHEN spalte1 IS NULL THEN 1 ELSE 0 END + CASE WHEN spalte2 IS NULL THEN 1 ELSE 0 END + CASE WHEN spalte3 IS NULL THEN 1 ELSE 0 END + CASE WHEN spalte4 IS NULL THEN 1 ELSE 0 END >= 2
Diese Abfrage ermittelt alle Zeilen der Tabelle, in denen 2 oder mehr Spalten NULL-Werte enthalten.
Mit Hilfe von dynamischem SQL kann mit diesem Ansatz einfach eine gespeicherte Prozedur geschrieben werden,
die die entsprechenden Zeilen selektiert oder direkt löscht.
Schauen Sie sich das fertige Beispiel doch einfach mal an.
|