首页 > 解决方案 > CAST/CONVERT 问题 算术溢出错误

问题描述

SELECT工作,但UPDATE没有。

每个版本CASTCONVERT

我收到此错误:

将 int 转换为数据类型 numeric 的算术溢出错误

当我尝试这样做时:

$sql = "UPDATE rentinc ".
       "SET curr_loss_mo = ROUND(CONVERT(numeric(3,0), DATEDIFF(DAY, missincdate, GETDATE()) / 30), 0) ".
       "WHERE months2 > 12";

我很确定上面的代码有些矫枉过正,但我​​正在尝试一切。

我可以去 SSMS 并运行这个 SELECT:

SELECT curr_loss_mo, ROUND(CONVERT(numeric(3, 0), DATEDIFF(DAY, missincdate, GETDATE()) / 30), 0) AS DateNumCalc
FROM rentinc
WHERE months2 > 12

它工作正常。而且这两列看起来一模一样!该curr_loss_mo字段是 anumeric(3,0)并且表中没有将尝试使用超过三个字符进行更新的值。

那么为什么我会收到这个错误?

“将 int 转换为数字数据类型的算术溢出错误”

标签: sqlsql-serversql-server-2014

解决方案


事实证明,这个谜团变得更深了,但我找到了解决方法,所以我处理了它。

我制作了名为 temp_rentinc 的rentinc 表的临时副本。这是一个精确副本,如“SELECT * INTO temp_rentinc FROMrentinc”。

由于完全让我感到困惑的原因,我在上面发布的更新代码与 temp_rentinc 一起使用,但与rentinc 无关!感到困惑的是,我编写了一个程序来通过“SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '每个表名”来比较结构。

该程序验证了它们完全相同。叹。有时,小精灵会抓住你。长话短说,我杀死了原始表,并反转 SELECT INTO 以重新创建表,代码现在可以正常工作了。

这在“WTF?”中。文件。谢谢各位的意见。 - 约翰


推荐阅读