【问题标题】:SET ANSI_NULL is ON but NULL rows are still being returnedSET ANSI_NULL 为 ON,但仍返回 NULL 行
【发布时间】:2016-02-19 19:22:58
【问题描述】:

我有下表,其中 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 NULL 的 SELECT 语句 即使 column_name 中有非空值,也返回零行。

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

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

我返回一行值为 NULL

为什么?

【问题讨论】:

标签: sql ansi-nulls


【解决方案1】:

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

使用“SET ANSI_NULLS ON”:

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

  • 另一方面,IS NULL总是评估为“true”(如果为 null)或“false”(如果不为 null)。

    李>

查看这里了解更多详情:

【讨论】:

  • 要在 ANSI_NULL 设置为 ON 的情况下不返回 NULL 行,我需要使用 Equals 运算符 (= NULL),而不是 IS NULL。感谢您对另一篇文章的引用。它澄清了很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2016-09-30
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多