2016-02-19 48 views
0

我與SET ANSI_NULL下表設置爲ONSET ANSI_NULL是開啓狀態,但仍然被返回NULL行

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tblStandard5columnCustomerDetails] 
(
    [Id] [int] NOT NULL, 
    [FName] [varchar](60) NULL, 
    [Address] [varchar](50) NULL, 
    [PhoneNumber] [varchar](11) NULL, 
    [LName] [varchar](60) NULL 
) ON [PRIMARY] 

GO 

並插入下面的一個記錄:

Insert Into [dbo].[tblStandard5columnCustomerDetails] 
VALUES 
(
1, 
NULL, 
NULL, 
NULL, 
NULL 
); 

根據微軟的文章使用Select語句時,我不應該返回任何行WHERE column_name = NULL

當SET ANSI_NULLS爲ON時, SELECT語句使用WHERE column_name = NULL即使在 column_name中存在空值,也會返回零行。即使column_name中存在非空值,使用WHERE column_name <> NULL 的SELECT語句也會返回零行。

但當執行這個查詢

select FNAME From [dbo].[tblStandard5columnCustomerDetails] WHERE FName IS NULL 

我返回一行與NULL

爲什麼值?

+0

請訪問http://小號tackoverflow.com/questions/9766717/in-sql-server-what-does-set-ansi-nulls-on-mean?rq=1 –

回答

2

你基本上回答了你自己的問題。

隨着「SET ANSI_NULLS ON」:

  • 的「關係運算符」 +, <, >, <=, >=永遠不會評估爲「真」或「假」,如果一個操作數是零。

  • IS NULL,在另一方面,將總是評估爲 「真」(如果爲空),或 「假」(如果不爲null)。

在這裏尋找更多詳情:

+0

要將ANSI_NULL設置爲ON時返回NULL行,我需要使用Equals運算符(= NULL),而不是IS NULL。感謝您參考其他帖子。它澄清了很多。 – enigma6205

相關問題