从网上查到的资料说,任何数据类型与NULL值进行计算,结果都将为NULL.select null-1
结果是null可是下面这个查询为什么会出错呢?
select isnull(null-1,'test');居然报错说将varchar转为int失败。为什么会说转成int失败呢?前面的null-1的结果不是null么?怎么还会去转成int?环境sql server2000谢谢回答。

解决方案 »

  1.   

    呵呵。确实没注意过。应该是null-1结果隐式转换成了int类型。所以才会出现这个错误。
      

  2.   

    http://blog.csdn.net/Beirut/archive/2009/08/11/4433706.aspx除了count(*) 外其他聚合函数都会忽略空值
      

  3.   

    语法
     
    ISNULL ( check_expression , replacement_value )
     参数
    check_expression 将被检查是否为 NULL 的表达式。check_expression 可以为任何类型。replacement_value 当 check_expression 为 NULL 时要返回的表达式。replacement_value 必须是可以隐式转换为 check_expresssion 类型的类型。返回类型
    返回与 check_expression 相同的类型。备注
    如果 check_expression 不为 NULL,则返回它的值;否则,在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同)后,则返回前者。
      

  4.   

    test必须可以转换为整型才可以,如果换为'1'就可以了
      

  5.   

    select isnull(null-1,''); 
    /*            
    ----------- 
    0(所影响的行数为 1 行)*/
      

  6.   

    1> select isnull(null-1,'test');
    2> go
    Msg 245, Level 16, State 1, Server WUXN0058\SQLEXPRESS, Line 1
    Conversion failed when converting the varchar value 'test' to data type int.
    1> select isnull(null-1,0);
    2> go-----------
              0(1 rows affected)
    1>明白了吗?因为你前面的表达式 null-1 SQLSERVER认为它是个数字表达式。
      

  7.   

    NULL-1 的结果为 int 类型(遵从 1,这个是数据类型的隐式转换),而 isnull 函数返回的数据类型会遵从 null-1 表达式结果的类型。
    例如,
    select isnull(null-1, 2)
    /* 2 */
    select isnull(convert(varchar(10), null-1), 'test')
    /* test */
      

  8.   

     select isnull(null+'abcd','test')
    /* test */
      

  9.   

    隐式转换有什么规律的嘛? 我仍然是想不明白 为什么null-1会转成int类型而不转成null
      

  10.   

    book online 上有详细说明
    http://msdn.microsoft.com/en-us/library/ms187928%28SQL.90%29.aspx
      

  11.   

    select isnull(null+'text',4)
    -----
    4(1 行受影响)
    任何类型都可以代替null型 《个人理解》
      

  12.   

    我也不是很明白,现在我们也在学SQL