2
为什么“ SELECT POWER(10.0,38.0);”会引发算术溢出错误?
我正在更新我的IDENTITY溢出检查脚本以解决DECIMAL和NUMERIC IDENTITY列。 作为检查的一部分,我计算了每一IDENTITY列的数据类型范围的大小。我用它来计算该范围已用尽的百分比。对于DECIMAL与NUMERIC 该范围的大小2 * 10^p - 2,其中p是精度。 我用DECIMALand NUMERIC IDENTITY列创建了一堆测试表,并尝试如下计算它们的范围: SELECT POWER(10.0, precision) FROM sys.columns WHERE is_identity = 1 AND type_is_decimal_or_numeric ; 这引发了以下错误: Msg 8115, Level 16, State 6, Line 1 Arithmetic overflow error converting float to data type numeric. 我将其范围缩小到IDENTITY类型的列DECIMAL(38, 0)(即,具有最大精度),因此我POWER()直接尝试对该值进行计算。 以下所有查询 SELECT POWER(10.0, 38.0); SELECT CONVERT(FLOAT, (POWER(10.0, …