Be careful on NULL in Sql Server

 

     昨天在我们的一个程序发现了一个Bug, 程序是给Accounting用的一个Report,但是Accounting的人发现无论如何这个Report抓不出数据,跟进去查了一下,发现查数据的Sql是类似这样的:

   Select * from table_1 where sonumber not in

(select sonumber from table_2

union all

select sonumber from table_3

)

数据在Table_1里是存在的,table_2/3 里也不包含对应的SOnumber,但是Query的结果就是没有数据。再查了一下,发现原因在于Table_2中有些SoNumber的值是Null,而 where [field] not in (null) 这个判断,在Sql 里总是会返回false的 (偶这里的SET ANSI_NULLS 是ON,不过好像偶没见谁用过OFF)

改了一下in里的Select,处理掉NULL值以后Bug Fix

-------------------------------

 潜水N久,俺又回来了。 最近会玩弄一些Biztalk 和 SAP R3互联方面的东西,今天这个算一小泡泡。

  • 关闭引用
  • 评论 (9)
    • chengbo
    • 十月 13th, 2006

    newegg?

    • xzwplus
    • 十月 13th, 2006

    newegg? Steven?

    • Zee
    • 十月 13th, 2006

    @ chengbo:
    Newegg不错。
    @xzwplus:
    Steven 错了。 BTW,偶也不是小S haha

    • xzwplus
    • 十月 13th, 2006

    @Zee:
    我看到发mail的是Steven He, 还以为就是你呢。汗~~~

    • 江千帆
    • 十月 16th, 2006

    做过R3和.NET集成,也做过Biztalk的集成,还没有做过这两者的集成,倒是很希望和楼主沟通一下,互通有无。
    msn:bucher(at)msn.com

    • pp
    • 十月 20th, 2006

    呵呵,好久不见博了. 偶知道楼主是谁,US那边的。
    BTW,小S是谁?

    • Riven Huang
    • 十月 22nd, 2006

    Zee,你终于现身了,最近在哪混?

    • Zee
    • 十月 23rd, 2006

    @Riven Huang
    俺还在老地方啊。快3年了都。 你最近怎么样?

    • cocoman
    • 三月 20th, 2007

    null在数据库中是很特殊的一个值,null<>null,基本上null进行数值运算,例如null+null返回的也是null,并且返回的null不等于任何一个null,所以null一般用is来处理。相关的理论你可以搜索3VL(3 values logic)

    有一些函数会忽略null来进行处理,而有一些则不会忽略。。。例如sum/avg等(如果我没记错的话)会忽略null值,而count不会忽略。group by也会将所有的null值归为一类。

    反正null是一个需要特别留意的值。如果你研究深入一些,会发现它其实挺有意思的。。

关闭评论!