数字(19,0)的最大值是什么,如果达到了会发生什么?

时间:2014-05-05 00:09:42

标签: sql-server

在SQL Server表中,我有一个具有以下类型的列:

numeric(19, 0)

此类型的最大值是什么?

这对应于Java中的Long,其最大值为9,223,372,036,854,775,807(19位)。

SQL Server中的上述类型是否具有相同的最大值?

如果达到上述值,SQL Server会发生什么?

3 个答案:

答案 0 :(得分:2)

MSDN documentation相当无益地说:

  

当使用最大精度时,有效值为 - 10 ^ 38 +1到10 ^ 38 - 1 ...最大存储大小根据精度而变化。

(最大精度为numeric(38))。

从SQL Server 2012中进行试验, numeric(19,0)的最大值为10e18 - 1025 。试图插入任何更高的值会产生:

  

Msg 8115,Level 16,State 6,Line xx将float转换为数据类型numeric的算术溢出错误。

最大值确实因精度而异,并且看起来略低于10 ^(p-1)(其中p是精度),但确切的关系并不明显。毫无疑问,可以通过深入研究存储方法的位级细节来给出更准确的答案。

答案 1 :(得分:1)

numeric(19,0)指定一个固定精度数,其精度为19位,小数点右侧为0位。它不应该溢出。有关详细信息,请参阅decimal and numeric

答案 2 :(得分:1)

首先,十进制与数字同义。 decimal(2,1)表示在dot之前和之后求和的所有数字的总数可以是最大值2,dot之后的数字的总数可以是最大值1.因此范围是从-9.9到9.9 因此,数字(19,0)的范围是

-9999999999999999999.0 to
9999999999999999999.0

但有时也

9999999999999999999.2 
我的实验将允许

,不知道为什么。