SET ANSI_NULL 为 ON 但仍返回 NULL 行
SET ANSI_NULL is ON but NULL rows are still being returned
我有以下 table,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
时,我不应该返回任何行
When SET ANSI_NULLS is ON, a SELECT statement that uses WHERE
column_name = NULL returns zero rows even if there are null values in
column_name. A SELECT statement that uses WHERE column_name <> NULL
returns zero rows even if there are nonnull values in column_name.
但是什么时候执行这个查询
select FNAME From [dbo].[tblStandard5columnCustomerDetails] WHERE FName IS NULL
我返回值为 NULL 的一行
为什么?
你基本上回答了你自己的问题。
与"SET ANSI_NULLS ON":
如果其中一个操作数为空,"relational operators" +, <, >, <=, >=
将永远不会计算为 "true" 或 "false"。
IS NULL
,另一方面,总是计算为"true"(如果为空),或"false"(如果不为空)。
查看此处了解更多详情:
In SQL Server, what does "SET ANSI_NULLS ON" mean?
http://www.codeproject.com/Questions/378958/meaning-of-SET-ANSI-NULLS-ON
我有以下 table,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
When SET ANSI_NULLS is ON, a SELECT statement that uses WHERE column_name = NULL returns zero rows even if there are null values in column_name. A SELECT statement that uses WHERE column_name <> NULL returns zero rows even if there are nonnull values in column_name.
但是什么时候执行这个查询
select FNAME From [dbo].[tblStandard5columnCustomerDetails] WHERE FName IS NULL
我返回值为 NULL 的一行
为什么?
你基本上回答了你自己的问题。
与"SET ANSI_NULLS ON":
如果其中一个操作数为空,"relational operators"
+, <, >, <=, >=
将永远不会计算为 "true" 或 "false"。IS NULL
,另一方面,总是计算为"true"(如果为空),或"false"(如果不为空)。
查看此处了解更多详情:
In SQL Server, what does "SET ANSI_NULLS ON" mean?
http://www.codeproject.com/Questions/378958/meaning-of-SET-ANSI-NULLS-ON