这是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的.

posted @ 2012-05-07 16:09  qanholas  阅读(369)  评论(0编辑  收藏  举报