Sql server 数值(19,0)的最大值是多少?如果达到该值会发生什么?

Sql server 数值(19,0)的最大值是多少?如果达到该值会发生什么?,sql-server,Sql Server,在SQL Server表中,我有一个具有以下类型的列: numeric(19, 0) 此类型的最大值是多少 这对应于Java中的Long,其最大值为9223372036854775807(19位) SQL Server中的上述类型是否具有相同的最大值 如果达到上述值,SQL Server中会发生什么情况?numeric(19,0)指定一个固定精度的数字,其精度为19位,小数点右侧为0位。它不应该溢出。有关更多信息,请参阅。这个毫无帮助的人说: 使用最大精度时,有效值介于-10^38+1到10^

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

numeric(19, 0)
此类型的最大值是多少

这对应于Java中的
Long
,其最大值为
9223372036854775807
(19位)

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

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

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

这个毫无帮助的人说:

使用最大精度时,有效值介于-10^38+1到10^38-1之间…最大存储大小根据精度而变化

(最大精度为数值(38))

通过在SQL Server 2012中的实验,数值(19,0)的最大值为10e18-1025。尝试插入任何更高的值会给出:

Msg 8115,16级,状态6,第xx行算术溢出错误,将浮点转换为数据类型数字


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

首先,十进制与数字是一致的。 小数点(2,1)表示在点之前和之后求和的所有数字的总数最多为2,点之后的数字最多为1。所以范围是从-9.9到9.9 因此,数值(19,0)的范围为

但有时也

9999999999999999999.2 
将从我的实验中被允许,不知道为什么。

MSDN链接说“当使用最大精度时,有效值从-10^38+1到10^38-1”。所以很明显,这是一个极限,这个答案是不正确的,尽管文档没有说明极限是如何随精度变化的,或者当你超过它时会发生什么。
9999999999999999999.2