因为bit类型的值只有0,1和null,所有非0的数字转为bit类型的值都是1。

解决方案 »

  1.   

    这是因为 bit 类型只有两个值 0 和 1;
    不管isnull后面的第二个值是多少,只要不是0,那么值就是1declare @two int
    select isnull(cast(@two as bit),0)
    select isnull(cast(@two as bit),1)
    select isnull(cast(@two as bit),2)
    ------------------------------------
         
    ---- 
    0(所影响的行数为 1 行)     
    ---- 
    1(所影响的行数为 1 行)     
    ---- 
    1(所影响的行数为 1 行)
      

  2.   

    但是
    print isnull(cast(@two as bit),2)
    中 cast(@two as bit) 是null 啊!!!
    这怎么解释………………
      

  3.   

    这是因为2是作为bit类型的了,将他强制转换成了bit类型的值,也就是转换成了1,所以它是1,不可能是2,在isnull中,前后两个参数的类型要一样的!如果不一样,那么就把后面的转换为前面类型!你前面的为bit类型,所以它自动把后面的2转换成了bit类型的值(1)