SET ANSI_NULL включен, но строки 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, оператор SELECT, использующий WHERE column_name = NULL, возвращает нулевые строки, даже если в column_name есть нулевые значения. Оператор SELECT, использующий WHERE column_name <> NULL, возвращает ноль строк, даже если в column_name есть ненулевые значения.

Но когда выполнить этот запрос

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

Я возвращаю одну строку со значением NULL

Зачем?

1 ответ

Решение

Вы в основном ответили на свой вопрос.

С "SET ANSI_NULLS ON":

  • "реляционные операторы" +, <, >, <=, >= никогда не будет иметь значение "истина" или "ложь", если один из операндов равен нулю.

  • IS NULLс другой стороны, всегда будет иметь значение "истина" (если ноль) или "ложь" (если не ноль).

Смотрите здесь для более подробной информации:

Другие вопросы по тегам