从网上查到的资料说,任何数据类型与NULL值进行计算,结果都将为NULL.select null-1
结果是null可是下面这个查询为什么会出错呢?
select isnull(null-1,'test');居然报错说将varchar转为int失败。为什么会说转成int失败呢?前面的null-1的结果不是null么?怎么还会去转成int?环境sql server2000谢谢回答。
结果是null可是下面这个查询为什么会出错呢?
select isnull(null-1,'test');居然报错说将varchar转为int失败。为什么会说转成int失败呢?前面的null-1的结果不是null么?怎么还会去转成int?环境sql server2000谢谢回答。
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 的类型(如果这两个类型不同)后,则返回前者。
/*
-----------
0(所影响的行数为 1 行)*/
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认为它是个数字表达式。
例如,
select isnull(null-1, 2)
/* 2 */
select isnull(convert(varchar(10), null-1), 'test')
/* test */
/* test */
http://msdn.microsoft.com/en-us/library/ms187928%28SQL.90%29.aspx
-----
4(1 行受影响)
任何类型都可以代替null型 《个人理解》