问题:
有一个表
col1 col2
---------------------
a aa
b NULL
c cc
想要查询这样的一个结果:
col1 col2
---------------------
b NULL
c cc
查询语句如下:
Select * From tb where col1<>'aa'
但是真实结果确是:
col1 col2
---------------------
c cc
少了为NULL的那条记录,问题就出在WHERE后条件那里。
改成:
Select * From tb where isnull(col1,'')<>'aa'
结果正确。
在网上找了一些关于NULL的资料,转贴一下:
当我们在 sql server 中用 DECLARE 申明一个变量时, sql server 将会把变量存储在SQLs 内存空间的变量列表区域(variable table),变量列表中包含了变量的名称和存储地址。然而如果我们在创建变量的时候并没有给变量赋值的话,sql server是没有为变量分配内存的,因此变量并没有在内存中被定义。
然后当你用 SET 关键字给变量赋值的话,sql server 将为这个值分配内存空间并将地址存放在变量列表(variable table)中。如果你再次为这个变量赋值的话新的内存地址将替换旧的地址。
下面我们就来讨论一下 “= NULL”和“IS NULL”的区别。
“= NULL”
“= NULL”是值表达式。意味着,这个表达式会判断是否已经为变量正确设置了值。事实上我们是可以设置一个变量的值为 NULL 的(如果设置变量 = NULL