當 SET ANSI_NULLS 是 OFF 時,等於 (=) 和不等於 (<>) 比較運算子並不遵照 ISO 標準。

當 SET ANSI_NULLS 是 ON 時,使用 WHERE column_name = NULL 的 SELECT 陳述式會傳回零個資料列,即使 column_name 含有 Null 值,也是如此。使用 WHERE column_name <> NULL 的 SELECT 陳述式也會傳回零個資料列,即使 column_name 含有非 Null 值,也是如此。在將來的 SQL Server 版本中,ANSI_NULLS 一定會是 ON,而且明確將此選項設定為 OFF 的應用程式將會產生錯誤。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
CREATE TABLE [dbo].[myEmployees](
	[EmployeeID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](10) NOT NULL,
	[Title] [nvarchar](30) NULL,
	Sales INT NULL,
)
insert into myEmployees values
('Nancy','Sales Representative',100),
('Andrew','Sales Manager',200),
('Janet','Sales Representative',300),
('Margaret','Sales Representative',400),
('Sandy',NULL,500)
PRINT 'Testing default setting'
SELECT * FROM  myEmployees WHERE Title=NULL 
SELECT * FROM  myEmployees WHERE Title<>NULL 
SELECT * FROM  myEmployees WHERE Title IS NULL 

 

image

PRINT 'Testing ANSI_NULLS ON'
SET ANSI_NULLS ON
SELECT * FROM  myEmployees WHERE Title=NULL 
SELECT * FROM  myEmployees WHERE Title<>NULL 
SELECT * FROM  myEmployees WHERE Title IS NULL 

 

PRINT 'Testing SET ANSI_NULLS OFF'
SET ANSI_NULLS OFF
SELECT * FROM  myEmployees WHERE Title=NULL 
SELECT * FROM  myEmployees WHERE Title<>NULL 
SELECT * FROM  myEmployees WHERE Title IS NULL 

image

參考線上說明:http://msdn.microsoft.com/zh-tw/library/ms188048.aspx

其他參考:德瑞克學習筆記:T-SQL認識IS NULL函數

arrow
arrow
    全站熱搜

    小草 發表在 痞客邦 留言(0) 人氣()