2009-01-04 69 views

回答

16

From MSDN:

的SQL-92標準要求一個等於(=)或不等於對一個空值(<>)比較計算結果爲FALSE。當SET ANSI_NULLS爲ON時,即使column_name中存在空值,使用WHERE column_name = NULL的SELECT語句也會返回零行。即使列名中存在非空值,使用WHERE column_name <> NULL的SELECT語句也會返回零行。

當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的所有行。

+1

谷歌搜索SET ANSI NULLS ON的第一個結果。你會認爲搜索它比在這裏發佈問題更快。 – 2009-01-04 23:05:28

9

它改變了NULL的行爲方式。 NULL S IN ANSI產量之類的東西

NULL = NULL - >假

NULL <> NULL - >假

ANSI_NULLS隨着關閉,(NULL = NULL) - >真。

0

當它然後不計算空值並返回0

當開啓時,將一個值具有空返回比較的任何查詢一個0

實施例: SET ANSI_NULLS ON SELECT empname FROM emp1 WHERE phone = NULL

說明: 它將不返回任何內容,因爲SET ANSI_NULLS爲ON。

來源:

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

感謝,

羅希特

0

SET ANSI_NULLS OFF指示服務器,以評估使用非標準語義涉及NULL語句。

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!) 

你應該從來沒有創造新的代碼用的SET ANSI_NULLS OFF因爲非標準語義設置:

  • 這是從來沒有必要,
  • 數據庫查詢與豐富的語義表現當NULL與任何其他值(例如在WHERE子句中)的處理方式不同時發生,與NULL比較的值應始終返回False/UNKNOWN,
  • 它使代碼更難以維護,因爲開發人員可能沒有意識到它正在使用非標準設置,或被它弄糊塗,並且
  • Microsoft has warned在未來版本的SQL Server中,該設置將導致顯式錯誤。