日期:2014-05-18  浏览次数:20485 次

where E_ID=null和where E_ID=is null的区别
这里有一个A表其中ID为主键,E_ID为其中一个字段
表里有两条数据,一条数据E_ID值为3,另一条E_ID为空。

使用查询
SELECT   *   FROM   A   WHERE   E_ID=NULL
查询不到E_ID为空的数据

改为SELECT   *   FROM   A   WHERE   E_ID   is   NULL查询正常!

为什么?

------解决方案--------------------
null不能比较

只能是is null is not null

你可以自己测试下
------解决方案--------------------
尊重原创,源出处:http://blog.csdn.net/smile2me27/archive/2004/11/11/177101.aspx

在SQL2000中Null值的比较运算有两种规则。一种是ANSI SQL(SQL-92)规定的Null值的比较取值结果都为False,既Null=Null取值也是False。另一种不准循ANSI SQL标准,即Null=Null为True。
以一张表T的查询为例。

表T存在下面的数据:
RowId Data
--------------
1 'test '
2 Null
3 'test1 '

按照ANSI SQL标准,下面的两个查询都不返回任何行:
Query1: select * from T where Data=null
Query2: select * from T where Data <> null
而按照非ANSI SQL标准,查询1将返回第二行,查询2返回1、3行。
ANSI SQL标准中取得Null值的行需要用下面的查询:
select * from T where Data is null
反之则用is not null。由此可见非ANSI SQL标准中Data=Null等同于Data Is Null,Data <> Null等同于Data Is Not Null。

而控制采用那一种规则,需要使用命令SET ANSI_NULLS [ON/OFF]。ON值采用ANSI SQL标准,OFF值采用非标准模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以实现标准的切换,只是这个命令控制的是一组符合SQL-92标准的设置,其中就包括Null值的标准。

默认情况下,数据库管理程序(DB-Library)是SET ANSI_NULLS为OFF的。