我目前正在用MS-SQL编写将旧数据转换为新表,旧表中的一个变量是int。在新表中,由于现在输入了数据,因此它必须是小数(10,3)。旧数据也有一些空值。当我使用round转换数据以生成新的小数时,我得到一个错误:
Msg 8115,Level 16,State 8,Line 1 算术溢出错误将int转换为数据类型numeric。
使用以下代码:
insert into Data_Exchange_Claims_History (Qty_Dispense)
select convert(decimal(10,3),round(ISNULL(Qty_Dispense, 0), 3))
from dbo.Data_Exchange_Claims_History_old c
答案 0 :(得分:4)
我认为问题是它如何失败;
INT
并不总是适合DECIMAL(10,3)
。
DECIMAL(10,3)
表示总共10位数,其中3位于小数点右侧。
换句话说,它只能表示最多9999999
的整数。
答案 1 :(得分:1)
只有当< = 9,999,999时,INT才能适合DECIMAL 10,3 9,999,999将变为9,999,999.000(总共10位,3位小数)。
答案 2 :(得分:0)
在玩了一段时间之后,我突然意识到我只需要在三个地方移动小数,所以我将数字除以1000就可以了。新查询如下所示:
insert into Data_Exchange_Claims_History (Qty_Dispense)
select convert(decimal(10,3),(Qty_Dispense/1000))
from dbo.Data_Exchange_Claims_History_old c
感谢所有为此做出贡献的人,因为它帮助我以全新的眼光看待问题。