Heim >Datenbank >MySQL-Tutorial >Warum wird NULL = NULL in SQL Server als „Falsch' ausgewertet?

Warum wird NULL = NULL in SQL Server als „Falsch' ausgewertet?

Barbara Streisand
Barbara StreisandOriginal
2025-01-20 23:12:12352Durchsuche

Why Does NULL = NULL Evaluate to False in SQL Server?

Eindeutiger NULL-Vergleich von SQL Server: Warum NULL = NULL oft falsch ist

SQL Server behandelt NULL-Werte anders als viele andere Programmiersprachen. Eine häufige Ursache für Verwirrung ist die Tatsache, dass NULL = NULL normalerweise zu FALSE ausgewertet wird. Das ist kein Fehler; Es handelt sich um eine bewusste Designentscheidung, die in der Definition von NULL selbst verwurzelt ist.

In SQL Server stellt NULL einen unbekannten oder fehlenden Wert dar. Daher ist der Vergleich zweier NULL-Werte wie der Vergleich zweier Unbekannter – es ist unmöglich, definitiv zu sagen, ob sie gleich sind, da ihre Werte undefiniert sind. Das Ergebnis von NULL = NULL ist oft FALSE (oder manchmal NULL, je nach Kontext und Systemeinstellungen).

Dieses Verhalten ist auf den ANSI SQL-92-Standard zurückzuführen. Es ist jedoch wichtig, die Auswirkungen der ansi_nulls-Einstellung in SQL Server zu verstehen.

Die Rolle von ansi_nulls

Die Einstellung ansi_nulls bestimmt, wie SQL Server NULL-Vergleiche interpretiert.

  • ansi_nulls ON (Standard): Unter dieser Einstellung (Standard) wird NULL = NULL zu FALSE ausgewertet, entsprechend dem ANSI SQL-92-Standard.

  • ansi_nulls OFF: Mit dieser Einstellung wird NULL = NULL zu TRUE ausgewertet. Dieses Verhalten spiegelt die Art und Weise wider, wie NULL in vielen anderen Programmiersprachen behandelt wird, wo es oft als besonderer Wert betrachtet wird, der einen undefinierten Zustand darstellt.

Anschauliches Beispiel:

Der folgende Codeausschnitt verdeutlicht den Unterschied:

<code class="language-sql">SET ANSI_NULLS OFF;

IF NULL = NULL
    PRINT 'TRUE';
ELSE
    PRINT 'FALSE';

SET ANSI_NULLS ON;

IF NULL = NULL
    PRINT 'TRUE';
ELSE
    PRINT 'FALSE';</code>

Mit ansi_nulls OFF geben beide IF-Anweisungen „TRUE“ aus. Mit ansi_nulls ON gibt die erste IF-Anweisung „FALSE“ aus, während die zweite auch „FALSE“ ausgibt

Das Verständnis der ansi_nulls-Einstellung und der inhärenten Mehrdeutigkeit von NULL-Vergleichen ist für das Schreiben von robustem und fehlerfreiem SQL Server-Code unerlässlich. Achten Sie immer darauf, wie NULL-Werte in Ihren Abfragen behandelt werden, um unerwartete Ergebnisse zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum wird NULL = NULL in SQL Server als „Falsch' ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn