如果Varchar超过999,则算术溢出错误,为什么?

我在我的数据库中发现了一个奇怪的问题,我能够修复它,但我不明白为什么首先会发生错误。我正在使用 Microsoft SQL Server 2017。

以下代码返回算术溢出错误:

SELECT '1000' / 100.0 FROM table_name
SELECT '1000.0' / 100.0 FROM table_name

返回错误:

将 varchar 转换为数字类型的算术溢出错误。

但奇怪的是以下代码不会导致错误:

SELECT '100' / 100.0 FROM table_name

返回:每行 1.000000。

SELECT '999' / 100.0 FROM table_name

返回:每行 9.990000。

SELECT '100.0' / 100.0 FROM table_name

返回:每行 1.000000。

SELECT '1000' / 100 FROM table_name

返回:每行 10 个。

我已经修复了代码,以便它在尝试进行算术运算之前使用转换,但让我困扰的是为什么代码在没有转换小于 1000 的数字的情况下工作????这真是烦死我了!

回答

您在这里有 2 个值:

  1. '1000' 这是一个 varchar(4)
  2. 100.0 这是一个 decimal(4,1)

因此,当您执行表达式时'1000' / 100.0varchar 将隐式转换decimaldecimal具有更高数据类型优先级的as 。但是,由于 adecimal(4,1)可以存储999.9的最大值是,因此该值会1000溢出并出现错误。


以上是如果Varchar超过999,则算术溢出错误,为什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>