Gibt das SQL-92-konforme Verhalten der Vergleichsoperatoren Equals (=) und Not Equal to (<>) bei Verwendung mit Nullwerten an.
Syntax
SET ANSI_NULLS {ON | OFF}
Anmerkungen
Der SQL-92-Standard verlangt, dass ein Vergleich von equals (=) oder ungleich (<>) mit einem Nullwert zu FALSE ausgewertet wird. Wenn SET ANSI_NULLS aktiviert ist, gibt eine SELECT-Anweisung mit WHERE column_name = NULL null Zeilen zurück, auch wenn in column_name Nullwerte vorhanden sind. Eine SELECT-Anweisung mit WHERE column_name <> NULL gibt null Zeilen zurück, auch wenn column_name Nicht-Null-Werte enthält.
Wenn SET ANSI_NULLS DEAKTIVIERT ist, folgen die Vergleichsoperatoren Equals (=) und Not Equal To (<>) nicht dem SQL-92-Standard. Eine SELECT-Anweisung mit WHERE column_name = NULL gibt die Zeilen mit Nullwerten in column_name zurück. Eine SELECT-Anweisung mit WHERE column_name <> NULL gibt die Zeilen mit nonnull-Werten in der Spalte zurück. Darüber hinaus gibt eine SELECT-Anweisung mit WHERE column_name <> XYZ_value alle Zeilen zurück, die kein XYZ-Wert und nicht NULL sind.
Hinweis Ob Microsoft® SQL Server™ eine leere Zeichenfolge entweder als einzelnes Leerzeichen oder als echte leere Zeichenfolge interpretiert, wird durch die Einstellung der Kompatibilitätsstufe von sp_dbcmptlevel gesteuert. Wenn der Kompatibilitätsgrad kleiner oder gleich 65 ist, interpretiert SQL Server leere Zeichenfolgen als einzelne Leerzeichen. Wenn der Kompatibilitätsgrad gleich 70 ist, interpretiert SQL Server leere Zeichenfolgen als leere Zeichenfolgen. Weitere Informationen finden Sie unter sp_dbcmptlevel.
Wenn SET ANSI_NULLS aktiviert ist, werden alle Vergleiche mit einem Nullwert als UNBEKANNT ausgewertet. Wenn SET ANSI_NULLS DEAKTIVIERT ist, werden Vergleiche aller Daten mit einem Nullwert als TRUE ausgewertet, wenn der Datenwert NULL ist. Wenn nicht angegeben, gilt die Einstellung der Option ANSI nulls der aktuellen Datenbank. Weitere Informationen zur Datenbankoption ANSI nulls finden Sie unter sp_dboption und Festlegen von Datenbankoptionen.
Damit ein Skript wie vorgesehen funktioniert, ist use unabhängig von der Datenbankoption ANSI nulls oder der Einstellung SET ANSI_NULLS NULL und NICHT NULL in Vergleichen, die Nullwerte enthalten können.
Für gespeicherte Prozeduren verwendet SQL Server den Einstellungswert SET ANSI_NULLS ab dem Zeitpunkt der anfänglichen Erstellung der gespeicherten Prozedur. Wenn die gespeicherte Prozedur anschließend ausgeführt wird, wird die Einstellung von SET ANSI_NULLS auf den ursprünglich verwendeten Wert zurückgesetzt und wird wirksam. Beim Aufruf innerhalb einer gespeicherten Prozedur wird die Einstellung von SET ANSI_NULLS nicht geändert.
SET ANSI_NULLS sollte auf ON gesetzt werden, um verteilte Abfragen auszuführen.
SET ANSI_NULLS muss auch aktiviert sein, wenn Indizes für berechnete Spalten oder indizierte Ansichten erstellt oder bearbeitet werden. Wenn SET ANSI_NULLS DEAKTIVIERT ist, schlagen CREATE-, UPDATE-, INSERT- und DELETE-Anweisungen für Tabellen mit Indizes für berechnete Spalten oder indizierte Ansichten fehl. SQL Server gibt einen Fehler zurück, der alle FESTGELEGTEN Optionen auflistet, die die erforderlichen Werte verletzen. Darüber hinaus ignoriert SQL Server beim Ausführen einer SELECT-Anweisung die Indexwerte für berechnete Spalten oder Ansichten, wenn SET ANSI_NULLS DEAKTIVIERT ist, und löst select auf, als gäbe es keine solchen Indizes für die Tabellen oder Ansichten.
Hinweis ANSI_NULLS ist eine von sieben SET-Optionen, die bei Indizes für berechnete Spalten oder indizierte Ansichten auf die erforderlichen Werte gesetzt werden müssen. Die Optionen ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER und CONCAT_NULL_YIELDS_NULL müssen ebenfalls auf ON gesetzt sein, während NUMERIC_ROUNDABORT auf OFF gesetzt sein muss.
Der SQL Server ODBC-Treiber und der Microsoft OLE DB-Anbieter für SQL Server setzen ANSI_NULLS beim Herstellen einer Verbindung automatisch auf ON. Diese Einstellung kann in ODBC-Datenquellen, in ODBC-Verbindungsattributen oder in OLE DB-Verbindungseigenschaften konfiguriert werden, die in der Anwendung vor dem Herstellen einer Verbindung mit SQL Server festgelegt werden. SETZEN Sie ANSI_NULLS standardmäßig auf OFF für Verbindungen aus DB-Library-Anwendungen.
Wenn SET ANSI_DEFAULTS aktiviert ist, ist SET ANSI_NULLS aktiviert.
Die Einstellung von SET ANSI_NULLS wird zur Ausführungs- oder Laufzeit und nicht zur Analysezeit festgelegt.
Berechtigungen
LEGEN SIE die ANSI_NULLS-Berechtigungen standardmäßig auf alle Benutzer FEST.
Beispiele
In diesem Beispiel werden die Vergleichsoperatoren Equals (=) und Not Equal To (<>) verwendet, um Vergleiche mit NULL- und Nonnull-Werten in einer Tabelle durchzuführen. Dieses Beispiel zeigt auch, dass IS NULL von der Einstellung SET ANSI_NULLS nicht beeinflusst wird.
Siehe auch
= (Equals)
IF…SONST
<> ( Ungleich)
SET
SET ANSI_DEFAULTS
WHERE
WHILE