SQL Server IS NULL und = NULL

Ich bin mal wieder auf ein Problem gestoßen.

Wenn ich eine Abfrage innerhalb einer Funktion oder Prozedur mache und eine Spalte gegen eine Variable prüfe, deren Wert NULL ist (aber auch mal einen Wert annehmen kann), gleiches gilt natürlich für die Spalte, haben wir ein Problem, denn

Declare @Ort Varchar(255) = NULL
Select ID_Person FROM Person where Ort = @Ort

liefert garnie nicht ein Ergebnis, solange @Ort = NULL ist.

Richtig wäre, wenn man das mit IS NULL statt = NULL macht (was es aber schon wieder umständlich macht, denn dann müssen wir den NULL – Case extra programmieren).

Schneller und einfacher geht es, wenn man „um“ die Abfrage ANSI-Nulls mal kurz ausschaltet:

SET ANSI_NULLS OFF
Declare @Ort Varchar(255) = NULL
Select ID_Person FROM Person where Ort = @Ort
SET ANSI_NULLS ON

Hier bekommt man nun ein Ergebnis zurück.

Bitte um Kommentare, ob das irgendwelche negativen Impacts haben kann (Performance oder anderes) oder ob es noch was „schöneres“ gibt.

Weiterführende Info’s hab ich hier noch gefunden, dort wird auch noch der technische Hintergrund etwas beleuchtet: http://www.sqlservercentral.com/articles/T-SQL/understandingthedifferencebetweenisnull/871/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Captcha * Time limit is exhausted. Please reload CAPTCHA.