我这测试了一组非常有意思的东西 发现不少问题 类似BUG 贴出来大家讨论下~~首先:
  SELECT   A   =  ISNULL(NULLIF('',''),0)   大家觉得是什么结果?  测试出来是 * 
   汗啊~~NULLIF('','')执行出来应该是 NULL 那么A应该=0才对
然后: 
   SELECT   A   =  ISNULL(ISNULL('',''),0)  大家觉得结果是什么? 测试出来是 白的
   ISNULL('','') 测试出来是空白, 结果就是空白 能理解。。
  但是有个问题。这个空白和NULL有什么区别?
再者:
    SELECT   A   =  ISNULL(NULLIF(''+'   ','   '),0)    大家这次觉得答案是什么?  测试出来是 0
   NULLIF(''+'   ','   ') 这个结果竟然是NULL ,难道逗号左右时相等的么? 不解
最后:
   SELECT   A   =  ISNULL(NULLIF('',''),'kk')  测试出来 是 空白 而不是KK
   太郁闷了。。难道ISNULL里面包含NULLIF就会出BUG么?大家快来帮我解答吧  我郁闷死了~

解决方案 »

  1.   

    先看看这个http://topic.csdn.net/t/20061123/22/5181133.html他的那篇我暂时没找到 
      

  2.   

    1.
    SELECT  A  =  ISNULL(NULLIF('',''),0) 
    A
    ----
    0
    (1 行受影响)2.
    SELECT  A  =  ISNULL(ISNULL('',''),0) 
    空白是空字符串,null是没值
      

  3.   

    3.
    SELECT  A  =  ISNULL(NULLIF(''+'  ','  '),0) ''+'  '是'  '='  '
    =>NULLIF(''+'  ','  ')=null
    => ISNULL(NULLIF(''+'  ','  '),0)=0
      

  4.   

    4
    SELECT  A  =  ISNULL(NULLIF('',''),'kkkkkkkkkkkkkkkkkk') A
    ----
    k
    (1 行受影响)A的值本来应该是kk,但是它受NULLIF('','')中的''影响,只能一个字符。
    NULLIF('','')=>A='k'
    NULLIF(' ',' ')=>A='k'
    NULLIF('  ','  ')=>A='kk'
    NULLIF('   ','   ')=>A='kk'
      

  5.   

    NULLIF返回类型引起的
    SELECT  A  =  ISNULL(convert(varchar, NULLIF('','')),0)
    /*
    A                              
    ------------------------------ 
    0(所影响的行数为 1 行)
    */
      

  6.   

    2.3结果没问题SELECT  A  =  ISNULL(convert(varchar, NULLIF('','')),'kk')
    /*
    A                              
    ------------------------------ 
    kk(所影响的行数为 1 行)
    */
      

  7.   

    你这个结果不对啊  和我运行的结果不一样
     SELECT  A  =  ISNULL(NULLIF('',''),0)  结果是0
    SELECT  A  =  ISNULL(ISNULL('',''),0)   结果是空
    SELECT  A  =  ISNULL(NULLIF(''+'  ','  '),0) 结果是0
    SELECT  A  =  ISNULL(NULLIF('',''),'kk') 结果是k