Grundsätzlich bedeutet ein NULL in SQL Server, dass es keinen Wert gibt und daher nicht verglichen werden kann, was zu unerwarteten Ergebnissen führt.
Beispielsweise gibt die folgende Abfrage keine Zeilen zurück, in denen der Wert NULL ist, aber ich möchte, dass dies der Fall ist:
SELECT *
FROM table
WHERE
(value != 26)
AND date IS NULL
AND last_modified >= '5/21/2014'
Ich verstehe, dass ich Folgendes als Problemumgehung tun kann, aber im Ernst? Müssen Sie jedes Mal, wenn ich es einfügen möchte, Klammern hinzufügen und prüfen, ob für jedes einzelne Feld null ist? Scheint hässlich, nicht intuitiv und verrückt.
SELECT *
FROM table
WHERE
(value != 26 OR value is null)
AND date IS NULL
AND last_modified >= '5/21/2014'
Ich meine, ich weiß, dass NULL kein Wert ist und daher nicht verglichen werden kann, aber können Sie nicht daraus schließen, dass es tatsächlich definitiv nicht 26 ist? Wenn 26 etwas ist und NULL nichts ist und nichts nichts ist, dann ist NULL nicht 26. Scheint mir logisch.
Weiß jemand, wie ich bei der Verwendung von Vergleichen auf sauberere Weise Nullen in meine Ergebnisse aufnehmen kann, ohne jedes Mal eine explizite Prüfung durchführen zu müssen? Auch das Deaktivieren von Nullen auf meinen Tabellen ist definitiv keine Option.
Bearbeiten:
Mein eigentliches Problem, warum ich es nicht so machen will, wie ich es gezeigt habe, wurde nicht aufgedeckt. Also los geht's. Ich schreibe ein Programm, mit dem Sie Abfragen für Datenbanktabellen erstellen und den Benutzer dynamisch Filter erstellen lassen können, die im Wesentlichen am Ende des Tages eine SQL-Anweisung erstellen und die Ergebnisse für den Benutzer anzeigen. Die vom Benutzer ausgewählten Felder können beliebige und / oder alle Felder in einer bestimmten Datenbank sein. Wenn ich diese ISNULL-Prüfung buchstäblich auf jedes einzelne Feld setzen muss, wäre dies wirklich ineffizient und würde das Betrachten von SQL sehr hässlich machen. Mein Programm ist tabellendefinitionsunabhängig, was bedeutet, dass es mir egal ist, was in Ihrer Tabelle enthalten ist, und ich möchte nicht wissen, wie Ihre Tabelle definiert ist. Ich möchte nur, dass Sie eine Tabelle auswählen, einige Felder auswählen, nach denen mit gleich, nicht gleich, in, nicht in usw. gefiltert werden soll.