Set ansi_nulls on什麼意思

SET ANSI_NULLS ON 是 SQL Server 中的一個指令,用來設定資料庫引擎如何處理等於(=)運運算元與 NULL 值的比較。當 ANSI_NULLS 被設定為 ON 時,SQL Server 會遵循 ANSI SQL 標準的規定,即當比較運運算元兩端的值至少有一個是 NULL 時,會傳回 UNKNOWN。

在 ANSI_NULLS 設定為 ON 之前,SQL Server 使用的是非標準的行為,即當比較運運算元兩端的值至少有一個是 NULL 時,會傳回 FALSE。這種行為可能會導致意外的結果,因為它違反了等於運運算元的傳統意義。

舉個例子來說明:

-- 設定 ANSI_NULLS 為 ON
SET ANSI_NULLS ON;

-- 創建一個表
CREATE TABLE TestTable (Col1 int, Col2 int);

-- 插入一些數據
INSERT INTO TestTable VALUES (1, 1);
INSERT INTO TestTable VALUES (1, NULL);
INSERT INTO TestTable VALUES (NULL, 1);
INSERT INTO TestTable VALUES (NULL, NULL);

-- 當 ANSI_NULLS 為 ON 時,以下查詢會返回 TRUE,因為任何一邊的值為 NULL,則結果為 UNKNOWN
SELECT Col1 = 1 AND Col2 IS NULL FROM TestTable;

在 ANSI_NULLS 設定為 OFF 時,上述查詢會返回 FALSE,因為 SQL Server 會將任何一邊的 NULL 值視為 FALSE。

-- 設定 ANSI_NULLS 為 OFF
SET ANSI_NULLS OFF;

-- 再次執行相同的查詢
SELECT Col1 = 1 AND Col2 IS NULL FROM TestTable;

在實際應用中,建議將 ANSI_NULLS 設定為 ON,因為這符合 ANSI SQL 標準,並且可以避免潛在的邏輯錯誤。然而,如果你的應用程式依賴於舊的行為,你可能需要將 ANSI_NULLS 設定為 OFF