SET ANSI_NULL 处于打开状态,但仍返回空行



我有下表,将 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文章,当使用 Select 语句时,我不应该返回任何行WHERE column_name = NULL

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

但是什么时候执行此查询

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

我返回一行值为 NULL

为什么?

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

使用"设置ANSI_NULLS"时:

  • 如果其中一个操作数为 null,则"关系运算符"+, <, >, <=, >=永远不会计算为"真"或"假"。

  • 另一方面,IS NULL始终计算为"真"(如果为空)或"假"(如果不是为空)。

查看此处了解更多详情:

  • 在 SQL Server 中,"SET ANSI_NULLS ON"是什么意思?

  • http://www.codeproject.com/Questions/378958/meaning-of-SET-ANSI-NULLS-ON

  • http://www.sqlservercentral.com/blogs/sqlstudies/2014/07/28/what-is-ansi_nulls-and-why-will-i-be-glad-when-it-finally-goes-away/

相关内容

  • 没有找到相关文章

最新更新