问题描述
- 用 Isnumeric判断从SQLServer中取出的数据类型为numeric的数据返回值是False是为什么
-
之前在sybase环境时使用的是自动采番功能,现在移到SQLServer环境就想用取得最大值然后加一的方法实现插入。
因为本来就有写好的取得最大值的函数所以就拿来直接用了,在+1之前要用Isnumeric()判断是否为数字。
Isnumeric(从数据库取出的值)
用response.write显示从数据库取出来的值是3565613,
用response.write Isnumeric(从数据库取出的值)得到的结果是false
最后的解决方法是 在前面加了CLong函数(这里还有个问题一开始选择加的是CInt,但是返回值还是False是为什么?)
虽然解决了但是很想知道为什么返回值是False【明明是数字,难道跟小数有关系么?
文笔不好还请各位见谅~一共能2个问题希望知道的大神能回答~跪谢!
解决方案
numeric 在功能上等价于 decimal
表示定点数,vbs又没有类型,不存在什么类型匹配。
解决方案二:
第一个问题,参考ISNUMERIC (Transact-SQL)
当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。
vbscript中的常量True转换成十进制是-1,而不是我以为的1。常量False转换成十进制是0。
根据上面的两个说明,SQL Server对于ISNUMERIC是数字的返回了1,在VBScript中因为不是-1(True),所以返回False。
第二个问题,参考VBScript CInt 函数,对于CINT,参数
值必须是介于 -32768 与 32767 之间的数字。
你给出的3565613已经超出了上面的范围,所以返回False。
时间: 2024-09-19 09:26:23