0

我有下表,将 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
);

根据微软文章,当使用 Select 语句时,我不应该返回任何行WHERE column_name = NULL

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

但是什么时候执行这个查询

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

我正在返回值为 NULL 的一行

为什么?

4

1 回答 1

2

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

使用“SET ANSI_NULLS ON”:

  • +, <, >, <=, >=如果操作数之一为空,“关系运算符”将永远不会计算为“真”或“假”。

  • IS NULL另一方面,将始终评估为“真”(如果为空)或“假”(如果不为空)。

在此处查看更多详细信息:

于 2016-02-19T19:31:28.710 回答