算术溢出错误!不知道如何解决

littleboy_6235573 2009-02-22 02:37:10
一个表中存在两个INT 型字段,字段A,字段B
一个DECIMAL字段,字段C
用如下语句发生错误
update Orders set 字段C= 1-(字段A % 字段B) where ID=7

错误代码:
服务器: 消息 8115,级别 16,状态 8,行 1
将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
语句已终止。
...全文
980 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
winter75 2009-02-23
  • 打赏
  • 举报
回复
update Orders set 字段C= cast(1-(字段A / 字段B) as decimal(19,3)) where ID=7
水族杰纶 2009-02-22
  • 打赏
  • 举报
回复
update Orders set 字段C= cast(1-40*1.0/100 as decimal(18,3)) where ID=7
littleboy_6235573 2009-02-22
  • 打赏
  • 举报
回复
THANK YOU!
昵称被占用了 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 littleboy_6235573 的回复:]
问题是再怎么设,上面的结果不对啊,
update Orders set 字段C= cast(1-(40 % 100) as decimal(18,3)) where ID=7
我要的答案应该是0.6 或者0.6000
而不是-39
[/Quote]
晕,你不知道%是取模运算就敢用?

如果你要0.6,应该这么写update
update Orders set 字段C= 1-(1.0*字段A / 字段B) where ID=7 


littleboy_6235573 2009-02-22
  • 打赏
  • 举报
回复
问题是再怎么设,上面的结果不对啊,
update Orders set 字段C= cast(1-(40 % 100) as decimal(18,3)) where ID=7
我要的答案应该是0.6 或者0.6000
而不是-39
昵称被占用了 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 littleboy_6235573 的回复:]
我字段C是定义成DECIMAL(5,3)
[/Quote]
5,3太小了,如果101%102=101,1-101==100,就超出了,你要么干脆用int(你的算法不会有小数部分),或者就用
DECIMAL(N,1),N大些,比如DECIMAL(18,1)
littleboy_6235573 2009-02-22
  • 打赏
  • 举报
回复
还是没有解决:比如
update Orders set 字段C= cast(1-(40 % 100) as decimal(5,3)) where ID=7
得出来的结果是-39
htl258_Tony 2009-02-22
  • 打赏
  • 举报
回复

alter table Orders alter column C decimal (18,3)
update Orders set 字段C= 1-(字段A*1.0 % 字段B*1.0) where ID=7
htl258_Tony 2009-02-22
  • 打赏
  • 举报
回复
alter table alter column C decimal (18,3)
littleboy_6235573 2009-02-22
  • 打赏
  • 举报
回复
我字段C是定义成DECIMAL(5,3)
htl258_Tony 2009-02-22
  • 打赏
  • 举报
回复
-->这样看行不行
update Orders set 字段C= 1-(字段A*1.0 % 字段B*1.0) where ID=7
昵称被占用了 2009-02-22
  • 打赏
  • 举报
回复
字段c定义有问题,应该有整数部分,如decimal(10,5),而不应该没有整数部分如decimal(10,10)
Andy__Huang 2009-02-22
  • 打赏
  • 举报
回复
update Orders set 字段C= 1-cast((字段A % 字段B) as numeric(12,2) where ID=7
水族杰纶 2009-02-22
  • 打赏
  • 举报
回复
--try as decimal(19,3)与字段c一样 
update Orders set 字段C= cast(1-(字段A % 字段B) as decimal(19,3)) where ID=7

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧