这是SQL Server的bug么?
在论坛上看到这样一个帖子, 原文如下:
在我的SQL Server2008R2上, 试了一下, 果然是这样, 转换成numeric时报错..
看样子很奇怪, 明明函数ISNUMBERIC的返回值是1, 但是转换却不成功, 为什么呢?
查了一下BOL, 发现如下的解释:
ISNUMBERIC函数判断表达式是否是以下类型之一:
int real
numeric bigint
money smallint
smallmoney tinyint
float decimal
看样子ISNUMBERIC不只判断是否是NUMBERIC类型, 也判断其他如money等类型.
试了一下转换成money型, 结果就没有报错, 语句如下:
SELECT cast('14,3434' AS money);
另外如果有$符号, 也是可以转换成功的, 语句如下:
SELECT ISNUMERIC('$123');
SELECT cast('$123' AS money);
总结一下, 这不是SQL Server的bug, 只是用户容易从函数ISNUMBERIC望文生义, 以为这个函数返回1的表达式一定是可以转化为NUMBERIC型的. 其实能转换为money而不能转化为numberic型的表达式, 用ISNUMBERIC判断也是返回1的.