SET ANSI_NULLS (ON | OFF) in SQL Server

Das ANSI_NULLS Die Datenbank-SET-Option steuert das Verhalten von Equal (=) - und Vergleichsoperatoren (! =) in Abfragen, während NULL-Datensätze verarbeitet werden. Es ist ein ISO-Standard, der für eine Abfrageaktion entscheidet, wie SQL Server den Vergleich mit NULL-Werten handhaben soll.

Die meisten von uns müssen die Einstellung ANSI_NULLS (ON | OFF) gesehen haben, die beim Start einer gespeicherten Prozedur, Funktion oder anderer Datenbankobjekte verwendet wurde.

Wichtiger Hinweis aus der Online-Dokumentation zu SQL Server:

In einer zukünftigen Version von SQL Server ist ANSI_NULLS immer auf ON gesetzt, und alle Anwendungen, die die Option explizit auf OFF setzen, erzeugen einen Fehler. Vermeiden Sie die Verwendung dieser Funktion in neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die diese Funktion derzeit verwenden.

Syntax

SET ANSI_NULLS {ON | AUS } 

SET ANSI_NULLS ON

Wenn die Datenbankoption ANSI_NULL auf gesetzt ist AUFdann ergibt ein Vergleich mit NULL-Datensätzen UNBEKANNTE. Daher werden keine Zeilen zurückgegeben. Wenn Sie etwas mit NULL vergleichen, wird dies als UNKNOWN und auch als. Angezeigt NULL = NULL Vergleich wird als UNBEKANNT betrachtet. Sie können NULL nicht mit irgendetwas vergleichen. Dies ist ein ISO-Standard beim Umgang mit NULL-Datensätzen.

SET ANSI_NULLS OFF

Wenn die Datenbankoption ANSI_NULLS auf festgelegt ist AUSdann gibt ein Vergleich mit NULL-Datensätzen Zeilen als Vergleich zurück, zu denen ausgewertet wird WAHR statt UNBEKANNT. Dies überschreibt das ISO-Verhalten. Bei ANSI_NULLS OFF führt der Vergleich mit NULL-Datensätzen zu TRUE. Daher werden Datensätze zurückgegeben. Wenn die Datenbankoption ANSI_NULLS OFF verwendet wird, berücksichtigt SQL Server beim Vergleich mit anderen Datensätzen NULL-Werte.

ANSI_NULLS Beispiele

Erstellen Sie eine temporäre Tabelle für Mitarbeiter und füllen Sie sie mit einigen Testdatensätzen auf.

WENN OBJECT_ID ('tempdb… #Employee') NICHT NULL DROP TABLE #Employee ist; CREATE TABLE #Employee (ID INT IDENTITY (1, 1) PRIMARY KEY, Name VARCHAR (100) NICHT NULL, Gehalt INT NULL); INSERT IN #Employee VALUES ('Niraj', 125), ('Vish', 80), ('Chetan', 235), ('Imans', NULL); SELECT * FROM #Employee; 

Wie oben gezeigt, wählen wir alle Datensätze aus den Employee-Tabellen aus und markieren NULL- und NOT NULL-Datensätze.

Unterscheiden Sie NULL- und NOT NULL-Datensätze

--Standardmethode zum Testen auf NULL SELECT * FROM #Employee WO Gehalt ist NULL; SELECT * FROM #Employee WO das Gehalt nicht NULL ist; 

Das obige Beispiel zeigt die Standardmethode zum Abrufen von NULL-Datensätzen aus der Tabelle. Dies ist der am meisten empfohlene Ansatz beim Umgang mit NULL-Werten.

SET ANSI_NULLS ON

- Setzen Sie die Option ANSI_NULLS auf ON. - Gibt keine Zeilen zurück, die dem ISO-Verhalten entsprechen. SET ANSI_NULLS ON SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Gehalt NULL; 

Im obigen Beispiel ANSI_NULLS ist ON. Daher wird der Vergleich mit NULL-Werten als UNKNOWN ausgewertet, sodass keine Zeilen zurückgegeben werden.

SET ANSI_NULLS OFF

- Setzen Sie die Option ANSI_NULLS auf OFF. - Gibt Datensätze zurück, die NULL haben. Überschreiben des ISO-Verhaltens. SET ANSI_NULLS OFF SELECT * FROM #Employee WHERE Gehalt = NULL; SELECT * FROM #Employee WHERE Gehalt NULL; 

Im obigen Beispiel ist ANSI_NULLS auf OFF gesetzt. Ein Vergleich mit NULL-Werten wird daher als TRUE bewertet. Dies gibt den NULL-Werten eine besondere Bedeutung, und Datensätze werden von den obigen Abfragen zurückgegeben.

Lesen Sie mehr über Datenbank- und SQL-Programmierung von Tech-Recipes.