2009-01-04 5 views

Antwort

16

From MSDN:

Das erfordert SQL-92-Standard, dass ein Gleichheits (=) oder ungleich (<>) Vergleich gegen einen Nullwert auf FALSE auswertet. 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.

+1

Das allererste Ergebnis in einer Google-Suche nach SET ANSI NULL ON. Sie würden denken, es wäre schneller, danach zu suchen, als hier eine Frage zu stellen. –

+0

Genau so habe ich es gefunden. : D – dkretz

+1

Diese Antwort sollte nicht abgestimmt werden, bis es behoben ist - es sollte nicht nur auf die Informationen verweisen, es sollte auch zitiert werden. Ist es nicht der Sinn von SO? – Paulius

9

Es ändert sich die Art und Weise NULL s verhalten. NULL s in ANSI Ausbeute Dinge wie

NULL = NULL -> false

NULL <> NULL -> false

Mit ANSI_NULLS off (NULL = NULL) -> true.

0

wenn man darauf dann nicht die NULL-Werte zählen kann und das Rück 0.

Wenn diese eingeschaltet ist, jede Abfrage, die einen Wert mit einer Null vergleicht kehrt a 0

Beispiel: ON SET ANSI_NULLS SELECT empname FROM emp1 WHERE Telefon = NULL

Erläuterung: Es wird nichts zurückgegeben, da SET ANSI_NULLS auf ON gesetzt ist.

Quelle:

http://www.xpode.com/ShowArticle.aspx?ArticleId=599

Danke,

Rohit

0

SET ANSI_NULLS OFF weist den Server Aussagen zu bewerten Einbeziehung NULL Nicht-Standard-Semantik.

SET ANSI_NULLS OFF; 
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END; -- Evaluates to 1 (bad!) 
SET ANSI_NULLS ON; 
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END; -- Evaluates to 0 (good!) 

Sie sollen nie neuen Code erstellen mit der Nicht-Standard-Semantik Einstellung von SET ANSI_NULLS OFF weil:

  • Es ist nie notwendig,
  • Für Datenbankabfragen mit der reichen Semantik verhalten Wenn NULL anders als jeder andere Wert behandelt wird (z. B. in einer WHERE -Klausel), sollten Werte, die mit NULL verglichen werden, immer False/UNKNOWN,
  • , zurückgeben
  • Es macht Code, der schwieriger zu warten ist, da Entwickler möglicherweise nicht erkennen, dass die nicht standardmäßige Einstellung verwendet wird, oder
  • Microsoft has warned dass in einer zukünftigen Version von SQL Server die Einstellung einen expliziten Fehler verursacht .
Verwandte Themen