SQLSERVER2000 数据库数据字段中有两个字段“sfsl” 数据类型int,“sffsdj”数据类型numeric
通过读取这两个字段的数据,然后对两个字段数据计算,语句如下:
使用ASP编程
检定费:
<input name="jdf" type="text" size="20" maxlength="20" value="<%=rs_zqzsbgsc_add("sfsl")* rs_zqzsbgsc_add("sffsdj")%>" /> *
运行提示:
如何修改?谢谢
上面说字段名是sffsdj,可下面语句中却写的是sfhsdj,到底叫啥名啊
是不是应该这样rs_zqzsbgsc_add("sfsl")、rs_zqzsbgsc_add("sfhsdj")之间加个加号
<input name="jdf" type="text" size="20" maxlength="20" value="<%=rs_zqzsbgsc_add("sfsl")+rs_zqzsbgsc_add("sfhsdj")%>" />
先给你说一个例子吧。
在一个表中,有一个字段的属性是numeric类型的,可以为空..但如果插入一个空值就会出错!提示信息为:输入的值与数据类型不一致!!
当你插入空值时,可能是插入的是空格,这里的为空是指值为null
在SQLSERVER中,关于数据的计算可能会导致出现如下的错误
在这里插入图片描述
遇到这类问题,一般都是由于结果超过了这个字段的长度
个字段的属性的概念。
create table T1
(
F1 numeric(6,4)
)
1
2
3
4
1
2
3
4
其中:
“4”代表是小数位数;
“6”代表的是小数+整数位数
所以,整数位数=6-4=2位
所以正常情况下,当超过3位的整数位数的值更新(插入、修改)到字段中了就会报溢出
在这里插入图片描述
此类情况是针对表级别的,遇到这类情况,可以先看看计算结果再对比一下数据库表结构就可以发现问题并针对解决
情况二
当然,这里再提一个有意思的问题,那就是跟表字段没有关系,如下
SELECT ROUND(0.97,1)
1
1
执行也会提示转为数据类型numeric时出现算术溢出错误,原因就是。
当你直接输入一个0.97的以后,数据库会默认他的属性为numeric(2,2)
而当进行了ROUND(四舍五入)操作后,原本的结果应该为1.0,对应的字段属性就变为了numeric(2,1),虽然整体的长度没变,但是整数位数就变大了,导致整数部分溢出。
字段类型长度 总长度 小数位数 整数位数
源字段 Numeric(2,2) 2 2 0
目标字段 Numeric(2,1) 2 1 1
目标字段长度大于源字段
在这里插入图片描述
如果要解决这种问题,那就需要我们解决数据库给这数据定义的默认属性
SELECT ROUND(CONVERT(numeric(3,2),0.97),1)
1
1
字段类型长度 总长度 小数位数 整数位数
源字段 Numeric(3,2) 3 2 1
目标字段Numeric(2,1) 2 1 1
目标字段长度小于源字段
在这里插入图片描述
问题得到解决,所以在sqlserver中拼接sql,要留意是否有类似的情况
<input name="jdf" type="text" size="20" maxlength="20" value="<%=rs_zqzsbgsc_add("sfsl")*rs_zqzsbgsc_add("sffsdj")%>" />
用response.write 输出,不用=
<input name="jdf" type="text" size="20" maxlength="20" value="<% response.write rs_zqzsbgsc_add("sfsl")+rs_zqzsbgsc_add("sfhsdj") %>" />
首先确定字段的正确性,如果读出来的是null 或空字符串,可以用val转一下
下面可写成:<%=val(""&rs_zqzsbgsc_add("sfsl"))*val(""&rs_zqzsbgsc_add("sfhsdj"))%>