0

我目前正在用 MS-SQL 编写将旧数据转换为新表,旧表中的变量之一是 int。在新表中,它必须是小数(10,3),因为现在正在输入数据。旧数据也有一些空值。当我使用 round 转换数据以生成新的小数时,出现错误:

消息 8115,级别 16,状态 8,第 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
4

3 回答 3

4

我认为问题是它怎么会失败?

AnINT并不总是适合 a DECIMAL(10,3)

DECIMAL(10,3)表示一共10位,其中3位在小数点右边。

换句话说,它只能表示最大为 的整数9999999

于 2013-02-15T17:36:43.880 回答
1

仅当 INT <= 9,999,999 9,999,999 将变为 9,999,999.000(总共 10 位,3 位小数)时,INT 才能适合 DECIMAL 10,3。

于 2013-02-15T17:39:56.063 回答
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 

感谢所有为此做出贡献的人,因为它帮助我从新的角度看待这个问题。

于 2013-02-15T18:58:25.550 回答