将数字(9,2)转换为数字(9,3)时的算术溢出错误

时间:2016-06-22 08:02:41

标签: tsql

我正在尝试在我的数据库中添加另一个小数点,并且我在Microsoft SQL Server Management Studio(2014)中不断收到此错误。该列当前是数字(9,2)NULL,我想将其更改为数字(9,3)NULL。无论是代码还是设计师,它都不允许我这样做。

ALTER TABLE LOG ALTER COLUMN WEIGHT numeric(9, 3) NULL

-- Arithmetic overflow error converting numeric to data type numeric.

在阅读了几个主题之后,我找不到这个问题的答案。由于我只是把这个领域做得更大,理论上应该没有截断问题或类似问题。

表中最大值为1102439.00,最小值为0.00。不是一个NULL。

2 个答案:

答案 0 :(得分:1)

  1. 当您已将其定义为NUMERIC(10,3),相当于DECIMAL(10,3)时,您将使用10-19范围内的精度 p 占用9字节(https://msdn.microsoft.com/en-us/library/ms187746.aspx)。请改为使用DECIMAL(19,3),这样您就可以获得具有相同存储空间的最大值。

答案 1 :(得分:1)

由于您的最大值长度为9,并且您尝试将其比例定义为3,这使得其长度为10位数,而NUMERIC(9,3)中未包含该值,

NUMERIC(P,S)开始,

  • P是精确度,显示总位数

  • S是Scale,表示小数后的总位数

为了避免这种情况,请尝试定义NUMERIC(10,3),这可能会解决您的问题