同意其他人已经说过的话。只是从另一个角度评论,如果你尝试设置ansi_nulls
来了,你可能会得到你所期望的:
set ansi_nulls off
if 1 = null
select 'a'
else
select 'b' -- Returned
if 1 != null
select 'a' -- Returned
else
select 'b'
更多信息从联机丛书:
当SET ANSI_NULLS为OFF时,等号(= )且不等于(<>) 比较运算符不符合ISO标准。使用WHERE column_name = NULL的SELECT 语句将返回 在column_name中具有空值的行。使用WHERE的SELECT语句 column_name <> NULL返回 列中具有非空值的行。此外,使用WHERE列名称的SELECT语句<> XYZ_value返回非XYZ_value且不是 NULL的所有行。
这就是ansi_nulls off
解释。但是,不要被诱惑简单地将其关闭,这是因为:
在SQL Server的未来版本中,ANSI_NULLS将永远是和 明确将该选项设置为OFF将产生 错误的任何应用程序。避免在新的开发工作中使用此功能,并计划 修改当前使用此功能的应用程序。
按照下面的推荐来代替:
对于脚本工作打算,不管ANSI_NULLS 数据库选项或SET ANSI_NULLS的设置,使用IS NULL和IS 在比较NOT NULL可能包含空值。
if 1 is null
select 'a'
else
select 'b' -- Returned
if 1 is not null
select 'a' -- Returned
else
select 'b'
你不能等于'没有'。 – sircodesalot
'NULL'永远不会等于,不等于,大于或小于任何值。 –
真的吗?它不可能不相等? –