SQL Server 獨特的 NULL 比較:為什麼 NULL = NULL 常常是假
SQL Server 處理 NULL 值的方式與許多其他程式語言不同。 一個常見的混淆來源是 NULL = NULL
通常計算為 FALSE
。這不是一個錯誤;而是一個錯誤。這是一個深思熟慮的設計選擇,植根於 NULL 本身的定義。
在 SQL Server 中,NULL 表示未知或缺失值。 因此,比較兩個 NULL 就像比較兩個未知數 – 不可能明確地說它們是否相等,因為它們的值未定義。 NULL = NULL
的結果通常是 FALSE
(或有時是 NULL
,取決於上下文和系統設定)。
此行為源自於 ANSI SQL-92 標準。但是,了解 SQL Server 中 ansi_nulls
設定的影響至關重要。
ansi_nulls
ansi_nulls
設定決定 SQL Server 如何解釋 NULL 比較。
ansi_nulls ON
(預設): 在此設定(預設)下,NULL = NULL
計算結果為 FALSE
,與 ANSI SQL-92 標準保持一致。
ansi_nulls OFF
: 使用此設置,NULL = NULL
的計算結果為 TRUE
。此行為反映了許多其他程式語言中處理 NULL 的方式,其中它通常被認為是表示未定義狀態的特殊值。
範例:
以下程式碼片段示範了差異:
SET ANSI_NULLS OFF; IF NULL = NULL PRINT 'TRUE'; ELSE PRINT 'FALSE'; SET ANSI_NULLS ON; IF NULL = NULL PRINT 'TRUE'; ELSE PRINT 'FALSE';
使用ansi_nulls OFF
,兩個IF
語句都會印出「TRUE」。 對於 ansi_nulls ON
,第一個 IF
語句將列印“FALSE”,而第二個
ansi_nulls
理解
以上是為什麼 NULL = NULL 在 SQL Server 中計算結果為 False?的詳細內容。更多資訊請關注PHP中文網其他相關文章!