sql int到十进制没有存储空间

时间:2013-02-15 17:30:25

标签: sql

我目前正在用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

3 个答案:

答案 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 

感谢所有为此做出贡献的人,因为它帮助我以全新的眼光看待问题。