指定在對空值使用等於 (=) 和不等於 (<>) 比較運算符時,這些運算符的 SQL-92 遵從行爲。
語法:
(sql server中默認爲ON)
解釋:
當 SET ANSI_NULLS 爲 ON 時,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 語句仍返回零行,即使 column_name 中存在空值,使用 WHERE column_name <> NULL 的 SELECT 語句仍返回零行,即使 column_name 中存在非空值。
當 SET ANSI_NULLS 爲 OFF 時,等於 (=) 和不等於 (<>) 比較運算符不遵從 SQL-92 標準。使用 WHERE column_name = NULL 的 SELECT 語句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 語句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 語句返回所有非 XYZ 值和非 NULL的行。
當 SET ANSI_NULLS 爲 ON 時,所有對空值的比較均取值爲 UNKNOWN。當 SET ANSI_NULLS 爲 OFF 時,如果數據值是 NULL,則所有數據對空值的比較將取值爲 TRUE。
爲使腳本按預期運行,不管 ANSI nulls 數據庫選項或 SET ANSI_NULLS 的設置是什麼,在可能包含空值的比較中使用 IS NULL 和 IS NOT NULL。
對於存儲過程,SQL Server 使用最初創建存儲過程時的 SET ANSI_NULLS 設置值。無論隨後何時執行存儲過程,SET ANSI_NULLS 的設置都還原爲其最初使用的值並生效。當在存儲過程內喚醒調用 SET ANSI_NULLS 時,其設置不更改。
在執行分佈式查詢時應將 SET ANSI_NULLS 設置爲 ON。
在計算列或索引視圖上創建或操作索引時,SET ANSI_NULLS 也必須爲 ON。如果 SET ANSI_NULLS 爲 OFF,計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。SQL Server 將返回一個錯誤,列出所有違反所需值的 SET 選項。另外,在執行 SELECT 語句時,如果 SET ANSI_NULLS 爲 OFF,則 SQL Server 將忽略計算列或視圖上的索引值並解析選擇,就好象表或視圖上沒有這樣的索引一樣。
說明: