Wie erkennt SQL WHERE-Spalte = NULL?

8

In Microsoft SQL habe ich die folgende Aussage (grob):

%Vor%

@somevalue wurde zuvor im Skript festgelegt.

Das läuft gut und SQL sagt mir, dass null Zeilen betroffen sind. Es gibt fünf Zeilen, in denen eine Spalte NULL ist. Was mache ich falsch?

    
Peter 29.06.2011, 20:18
quelle

4 Antworten

17

Sie müssen stattdessen IS NULL verwenden, um nach einem NULL-Wert in der Spalte zu suchen.

%Vor%     
Joe Stefanelli 29.06.2011 20:18
quelle
4

Versuchen Sie IS NULL

%Vor%

Quelle: Ссылка

    
cichy 29.06.2011 20:19
quelle
3

Joe hat Recht. Nichts kann gleich null sein. Es kann nur null sein, also UPDATE mytable SET mycolumn = @value WHERE anotherColumn IST NULL.

    
Craig 29.06.2011 20:20
quelle
1

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

erfasst

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 .

    
Mark Brackett 24.03.2012 02:26
quelle

Tags und Links