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
с другой стороны, всегда будет иметь значение "истина" (если ноль) или "ложь" (если не ноль).
Смотрите здесь для более подробной информации: