SET ANSI_NULL为ON但仍返回NULL行

时间:2016-02-19 19:22:59

标签: sql ansi-nulls

我将下表与SET ANSI_NULL设置为ON

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

根据Microsoft的文章,当使用带有WHERE column_name = NULL

的Select语句时,我不应该返回任何行
  

当SET ANSI_NULLS为ON时,使用WHERE的SELECT语句   column_name = NULL即使存在空值,也返回零行   列名。使用WHERE column_name<>的SELECT语句空值   即使column_name中存在非空值,也会返回零行。

但是何时执行此查询

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

我正在返回一行,其值为NULL

为什么?

1 个答案:

答案 0 :(得分:2)

你基本上回答了自己的问题。

使用" SET ANSI_NULLS ON":

  • &#34;关系运营商&#34; +, <, >, <=, >=永远不会评估为&#34; true&#34;或&#34;假&#34;如果其中一个操作数为null。

  • 另一方面,
  • IS NULL始终评估为&#34; true&#34; (如果为null),或者&#34; false&#34; (如果不是null)。

在此查看更多详情: