在SQL Server表中,我有一个具有以下类型的列:
numeric(19, 0)
此类型的最大值是什么?
这对应于Java中的Long
,其最大值为9,223,372,036,854,775,807
(19位)。
SQL Server中的上述类型是否具有相同的最大值?
如果达到上述值,SQL Server会发生什么?
答案 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
我的实验将允许,不知道为什么。