这里有一个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查询正常!为什么?

解决方案 »

  1.   

    null不能比较只能是is null     is not null你可以自己测试下
      

  2.   

    哦,有点明白了,那我改为SELECT  *  FROM  A  WHERE  E_ID=‘’
    为什么也不行?
      

  3.   

    null和""有什么区别吗?
      null指对象句柄不存在。   
      “”只是说明内容为空,本身还是存在的。
    什么是对象句柄,“”只是说明内容为空,本身还是存在的。怎么理解?
      

  4.   

    NULL是空,''是空字符串,不一样的
      

  5.   

    null指对象句柄不存在。   
      “”只是说明内容为空,本身还是存在的。
    什么是对象句柄,“”只是说明内容为空,本身还是存在的。怎么理解?
      

  6.   

    null只能用is
    如果是设置为null,那需要用到=null
      

  7.   

    尊重原创,源出处: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的。