2010-05-01 15 views

Antwort

6

= NULL wird für die Zuweisung zu einem NULL-Wert verwendet, während IS NULL verwendet wird, um festzustellen, ob eine Variable NULL-Wert ist.

Beispiel sssignment auf NULL:

Update TableName Set ColumnName = NULL 

Beispiel Vergleich zu einem NULL-Wert in einem Bedingungssatz (link):

Select * From TableName Where ColumnName is NULL 

ColumnName IS NOT Null kann auch machen verwendet werden, dass ein Wert ist Nicht-NULL.

31

In einer WHERE Klausel, column=null wird nie wahr sein, ist es nicht gültig ist Null auf diese Weise zu verwenden, müssen Sie column IS NULL oder column IS NOT NULL sagen. Dies spricht für die besondere Natur von NULL, es ist kein Wert für die Überprüfung auf Gleichheit, es ist ein unbekannter Wert, so dass Sie die IS oder IS NOT Syntax verwenden müssen.

Sie können etwas den Wert unter Verwendung der = gleich zuweisen. Zum Beispiel: UPDATE TableX SET Column=NULL...

Links:
Wikipedia NUll (SQL)
w3schools SQL NULL Values
SQL Tutorial, see IS NULL Operator section

+1

Doppelte Antwort? –

+0

Nicht "wird", sondern "sollte". (Leider.) Wie das gigantische c-n-p von einer anderen Seite zeigt, ließ es zumindest ein SQL-System (meistens) funktionieren. –

+1

Nur um technisch korrekt zu sein null ist die Abwesenheit eines Wertes, kein unbekannter Wert. –

14

„= NULL“ ist ein Ausdruck der Wert Jetzt „IS NULL“ die bevorzugte Methode zur Beurteilung des Zustands ist einer Variablen, die NULL ist.

Eine detailliertere Diskussion über die gleiche Frage kann in dem folgenden Link

http://www.sqlservercentral.com/articles/T-SQL/understandingthedifferencebetweenisnull/871/

Nicht sicher gefunden werden, wenn man den Artikel ohne Anmeldung in die Website lesen kann, so das Kopieren Posting hier die gleichen

Den Unterschied zwischen "IS NULL" und "= NULL" verstehen

Wenn eine Variable in SQL mit der Deklarationsanweisung erstellt wird, wird sie ohne Daten erstellt und in der Variablentabelle (vtable) innerhalb des SQL-Speicherplatzes. Die V-Tabelle enthält den Namen und die Speicheradresse der Variablen. Wenn die Variable jedoch erstellt wird, wird der Variablen keine Speicheradresse zugewiesen und daher ist die Variable nicht hinsichtlich des Speichers definiert.

Wenn Sie die Variable setzen, wird ihr eine Speicheradresse zugewiesen und die Anfangsdaten werden in dieser Adresse gespeichert. Wenn Sie den Wert erneut setzen, werden die Daten in der Speicheradresse, auf die die Variable zeigt, auf den neuen Wert geändert.

Jetzt für den Unterschied und warum jeder so verhält, wie es tut.

„= NULL“

„= NULL“ ist ein Ausdruck von Wert.Das heißt, wenn die Variable gesetzt und Speicher zum Speichern von Daten angelegt wurde, hat sie einen Wert. Eine Variable kann tatsächlich auf NULL gesetzt werden, was bedeutet, dass der Datenwert der Objekte unbekannt ist. Wenn der Wert hat wie so gesetzt:

DECLARE @val CHAR(4) 



SET @val = NULL 

Sie haben explizit den Wert der Daten unbekannt gesetzt und so, wenn Sie tun:

If @val = NULL 

Es wird als wahrer Ausdruck auszuwerten.

Aber wenn ich tun:

DECLARE @val CHAR(4) 



If @val = NULL 

Es false auswerten wird.

Der Grund dafür ist die Tatsache, dass ich nach NULL als Wert von @val suche. Da ich den Wert von @val nicht gesetzt habe, wurde keine Speicheradresse zugewiesen und daher existiert kein Wert für @val.

Hinweis: Siehe Abschnitt zu SET ANSI_NULLS (ON | OFF) aufgrund von Unterschieden in SQL 7 und 2000, die dazu führen, dass Beispiele nicht funktionieren. Dies basiert auf SQL 7.

„IS NULL“

Now „IS NULL“ ist ein wenig komplizierter und ist die bevorzugte Methode zur Bewertung des Zustands einer Variable, NULL. Wenn Sie die "IS NULL" -Klausel verwenden, überprüft es sowohl die Adresse der Variablen als auch die Daten innerhalb der Variablen als unbekannt. Also wenn ich zum Beispiel folgendes mache:

DECLARE @val CHAR(4) 



If @val IS NULL 

      PRINT ‘TRUE’ 

ELSE 

      PRINT ‘FALSE’ 



SET @val = NULL 



If @val IS NULL 

      PRINT ‘TRUE’ 

ELSE 

      PRINT ‘FALSE’ 

Beide Ausgänge werden TRUE sein. Der Grund ist im ersten @val IS NULL Ich habe nur die Variable deklariert und kein Adressraum für Daten wurde gesetzt, nach dem "IS NULL" sucht. Und in der Sekunde wurde der Wert explizit auf NULL gesetzt, was auch "IS NULL" prüft.

SET ANSI_NULLS (ON | OFF)

mich Nun lassen Sie einen Knick in den Arbeiten werfen. In den vorherigen Beispielen sehen Sie, dass = NULL funktioniert, solange der Wert explizit gesetzt ist. Wenn Sie jedoch ANSI_NULLS ON einstellen, verhalten sich die Dinge etwas anders.

Ex.

DECLARE @val CHAR(4) 



SET @val = NULL 



SET ANSI_NULLS ON 



If @val =NULL 

      PRINT ‘TRUE’ 

ELSE 

      PRINT ‘FALSE’ 



SET ANSI_NULLS OFF 



If @val =NULL 

      PRINT ‘TRUE’ 

ELSE 

      PRINT ‘FALSE’ 

Sie das erste Mal, beachten Sie die = NULL-Anweisung ausführen, nachdem SET ANSI_NULLS ON Sie tun bekommen eine falsche und nachdem Sie ein TRUE erhalten Einstellung OFF. Der Grund ist wie folgt.

Auszug aus SQL BOL Artikeln „SET ANSI_NULLS“

Der SQL-92-Standard verlangt, dass ein Gleichheits (=) oder ungleich (<>) Vergleich mit einem Null-Wert zu FALSE ausgewertet wird. Wenn SET ANSI_NULLS auf ON gesetzt ist, gibt eine SELECT-Anweisung, die WHERE column_name = NULL verwendet, null Zeilen zurück, selbst wenn in column_name Nullwerte vorhanden sind. Eine SELECT-Anweisung, die WHERE column_name <> NULL verwendet, gibt Nullzeilen zurück, auch wenn in Spalte_name nichtnull Werte sind.

Wenn SET ANSI_NULLS auf OFF gesetzt 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 null-Werten in column_name zurück.Eine SELECT-Anweisung mit WHERE column_name <> NULL gibt die Zeilen mit Nonnull-Werten in der Spalte zurück. Außerdem gibt eine SELECT-Anweisung, die WHERE spaltenname <> XYZ_value verwendet, alle Zeilen zurück, die nicht XYZ-Wert sind und die nicht NULL sind.

Ende Auszug

So wie SQL92 definiert „= NULL“ sollte immer falsch zu bewerten. Selbst wenn Sie den Wert explizit angeben, bedeutet dies, dass Sie die Bedingung = NULL nie erfüllen werden, wenn Ihr Code nicht wie vorgesehen funktioniert. Der größte Grund dafür, dass = NULL Sie in den Fuß schießen wird, ist, dass SQL 7, wenn es ausgeliefert und installiert wird, standardmäßig auf ANSI_NULL OFF gesetzt ist, aber SQL 2000 standardmäßig auf ANSI_NULL ON gesetzt ist. Natürlich können Sie dies auf verschiedene Arten ändern, aber wenn Sie eine Datenbank von 7 auf 2000 aktualisierten und das = NULL nur dann gefunden haben, wenn Sie explizit einen Standard 2000 Server einrichten, bricht Ihr Code jetzt ab und kann Datenprobleme verursachen.

Noch ein weiterer Grund, IS NULL stattdessen wie unter SQL 92 Richtlinien zu verwenden, wird es immer noch auf TRUE auswerten und somit ist Ihr Code sicherer für die Aktualisierung des Servers.

Zusammenfassung

Wenn Zusammenfassung es sei denn, Sie müssen prüfen, ob der Wert einer Variablen gleich NULL gesetzt wurde und Sie haben festgelegt ANSI_NULLS ON, dann immer die „IS NULL“ verwenden Klausel, wenn eine Variable zu validieren ist Null. Wenn Sie stattdessen = NULL verwenden, können Sie sich viele Kopfschmerzen bereiten, wenn Sie versuchen, Probleme zu beheben, die jetzt oder in der Zukunft auftreten können.

Basis

Einige der bereitgestellten Informationen kommt von, wie C++ funktioniert und wie SQL unter jedem Umstand verhält. Unglücklicherweise hat SQL, soweit ich weiß, keine addressof-Funktion, die es mir erlaubt, die tatsächliche Speicheradresse auszugeben, um anzuzeigen, was unter der Haube passiert. In C++, wenn eine Variable erstellt wird, hat die Variable eine Adresse von 0xddddddd (im Debug, aber es kann auch andere nicht-reale Adressen sein). Wenn Sie die Variable beim ersten Mal einstellen, erhalten Sie eine gültige Speicheradresse, in der die Daten gespeichert werden. In den Abschnitten zu IS NULL und SET ANSI_NULLS ... können Sie weitere Informationen von SQL Books Online erhalten.

+0

vielen dank für ihre vollständige antwort! – user329820

+0

würden Sie mehr über die Anmerkung, die oben nach dem "= null" Teil geschrieben wurde, erklären – user329820

Verwandte Themen