我读了一篇有趣的文章here
它告诉我写SET ANSI_NULLS ON
时,SQL Server会以不同的方式对NULL值进行比较。网站上给出的例子如下:
SET ANSI_NULLS ON IF NULL = NULL PRINT 'same' ELSE PRINT 'different'
--result: different
SET ANSI_NULLS ON IF NULL IS NULL PRINT 'same' ELSE PRINT 'different'
-- result: same
虽然我能理解文字,但我无法理解why did the SQL have to behave this way ?
=
。它背后的意图是什么?为什么我们被迫使用IS NULL
种语法?sql server
的未来版本中,set ansi-nulls on
似乎是默认的。背后肯定有一个原因。任何人都可以向我解释一下吗?
根据@Blams的回答,我试过下面的代码。无论我们设置ansi nulls to on or off
还是同样的结果。
create table A
(
id int identity not null,
name varchar null
)
create table B
(
id int identity not null,
name varchar null
)
insert into A (name) values ('a')
insert into B (name) values ('b')
insert into A (name) values (null)
insert into B (name) values (null)
set ansi_nulls off
select A.name, B.name from A join B on A.name = B.name
set ansi_nulls on
select A.name, B.name from A join B on A.name = B.name
结果集: --None -
两者似乎都在返回空行。如果我执行SET ANSI_NULLS OFF
,它应该比较null=null
并返回true,正确吗?那为什么没有结果返回?
答案 0 :(得分:0)
如果你想使用=那么只需要SET ANSI_NULLS OFF。
如果我在a.name = b.name上进行连接,我几乎不想在null上进行匹配。