这段时间一直在忙着把那个web管理serv-u的asp程序写完整,结果总是断断续续遇到以前从没有遇见过的难题。
1、serv是用字节来记录磁盘大小的,结果磁盘大于10G的,数字就超过了长整数的取值范围,于是用把int数字类型改为bigint,才得以解决。
2、接下来没办法做到的是asp从sql中读取了bigint数值后不能马上做加减乘除之类的运算,提示类型不正确,用int转换肯定是不行的,现在连使用clng也提示溢出了,有什么办法让我从sql中直接读出ini的数值?
临时解决办法是:
clng(left(QuotaMax,len(QuotaMax)-3))/1024,呵呵。就假设进制就是1000,而不是1024。
比较灵活的解决办法:
在查询时增加一个别名,让sql先把bigint的字段做出处理,然后再用clng来转换数据类型,如select *,QuotaMax/1024 as kkkk
然后再用clng(rs("kkk"))来处理。
背景知识:
尽管int依然是SQL Server 2000中最主要的整数数据类型,但是SQL Server 2000还是新增加了整数数据类型bigint,它应用于整数超过int数据范围的场合。
int数据类型所表示的数值范围从-2^31到2^31-1,也就是说,你可以用int数据类型来表达-2,147,483,648到2,147,483,647(即大约正负二十亿)之间的整数。一个int型占用四个字节的存储空间。
而bigint可以精确的表示从-2^63到2^63-1(即从-9,223,372,036,854,775,808到 9,223,372,036,854,775,807)之间的整数,它占用了八个字节的存储空间。
当你使用bigint时,需要留意下面几点:
- 在数据类型优先表中,bigint数据类型位于int之上、smallmoney之下。
- SQL Server不能自动的把int型数据转换成bigint型。
- 如果函数的参数表达式是一个bigint类型时,函数只能返回bigint类型的数据。使用bigint数据类型的函数有AVG、CEILING、FLOOR、MAX、MIN、ROUND以及SUM等等。
- 可以在指定了整型数据的所有语法位置使用bigint数据类型:ALTER PROCEDURE、ALTER TABLE、CREATE PROCEDURE、CREATE TABLE以及 DECLARE变量。
- 你可以在SQL Server目录组件(catalog components)得到bigint栏的信息。
你可能会对为什么任何人都有可能需要使用bigint数据类型这一问题感到疑惑。实际上,这个问题并不难以回答,例如当你数据库需要进行大数据运算时(如信用卡公司常常会碰到这种情况),你就需要使用bigint数据类型。