Sie müssen stattdessen IS NULL verwenden, um nach einem NULL-Wert in der Spalte zu suchen.
%Vor% ANSI SQL definiert NULL als nicht gleichwertig - noch eine weitere Instanz von NULL. Der kanonische Weg ist die Verwendung von IS NULL
und IS NOT NULL
.
Es gibt auch die MS SQL Server Option SET ANSI_NULLS
. Wenn diese Option deaktiviert wird, hat WHERE x = NULL
genau das, was Sie erwarten. Es enthält jedoch auch alle NULL
-Werte in einer Abfrage wie WHERE x <> 'abc'
- was möglicherweise nicht das ist, was Sie erwarten würden. Diese Option ist verbindungsspezifisch. Wenn Sie sie für Ihre Verbindung ändern, hat dies keine Auswirkungen auf andere. Sie können auch eine Standardeinstellung auf Datenbankebene festlegen. Beim Erstellen einer Stored Procedure wird die Option bei creation time - nicht runtime
Ein weiterer Trick besteht darin, eine Abfrage wie WHERE ISNULL(x, '') = ISNULL(@x, '')
zu erstellen. Ich glaube nicht, dass das SARGable ist, also ist die Leistung nicht annähernd so gut wie WHERE (x IS NULL AND @x IS NULL) OR (x = @x)
, aber es ist viel schöner zu schreiben und dynamisch zu bauen.
Oh - und, da wir ANSI SQL sprechen. Die ANSI SQL-Version von ISNULL
ist COALESCE
.
Tags und Links sql sql-server tsql