2 sakura chun sakura_chun 于 2016.01.19 22:30 提问

用 Isnumeric判断从SQLServer中取出的数据类型为numeric的数据返回值是False是为什么

之前在sybase环境时使用的是自动采番功能,现在移到SQLServer环境就想用取得最大值然后加一的方法实现插入。
因为本来就有写好的取得最大值的函数所以就拿来直接用了,在+1之前要用Isnumeric()判断是否为数字。
Isnumeric(从数据库取出的值)
用response.write显示从数据库取出来的值是3565613,
用response.write Isnumeric(从数据库取出的值)得到的结果是false
最后的解决方法是 在前面加了CLong函数(这里还有个问题一开始选择加的是CInt,但是返回值还是False是为什么?)
虽然解决了但是很想知道为什么返回值是False【明明是数字,难道跟小数有关系么?
文笔不好还请各位见谅~一共能2个问题希望知道的大神能回答~跪谢!

2个回答

caozhy
caozhy   Ds   Rxr 2016.01.19 22:31

numeric 在功能上等价于 decimal
表示定点数,vbs又没有类型,不存在什么类型匹配。

save4me
save4me   Ds   Rxr 2016.01.19 23:05

第一个问题,参考ISNUMERIC (Transact-SQL)

当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。

又参考vbscript中的True和False

vbscript中的常量True转换成十进制是-1,而不是我以为的1。常量False转换成十进制是0。

根据上面的两个说明,SQL Server对于ISNUMERIC是数字的返回了1,在VBScript中因为不是-1(True),所以返回False。

第二个问题,参考VBScript CInt 函数,对于CINT,参数

值必须是介于 -32768 与 32767 之间的数字。

你给出的3565613已经超出了上面的范围,所以返回False。

sakura_chun
sakura_chun 啊啊啊为什么一按回车就发出去了....抱歉...然后CUR_NO所在的SQL文是【SELECT MAX(xxx) AS CUR_NO FROM yyy】这个xxx在yyy表中的数据类型是numeric 所以我觉得不像是把TURE当1来判断了...不过也学习到啦再次谢谢
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码。判断时的语句是【IF Isnumeric(objrs("CUR_NO").value THEN】
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!