我收到算术溢出错误,但似乎无法查明具体情况。
我最近不得不调整一些存储过程,以允许输入未来的日期。
随后的数据提取的以下部分现在因算术溢出错误而失败:
SELECT
CONVERT(varchar(8),DATEDIFF(week, CONVERT(date,convert(varchar(8),Column1)), GETDATE()))/[Column2]
FROM Table1;
我不完全确定为什么会发生此错误。
任何给定条目中的字符不超过 8 个,将其更改为varchar(max)
不会执行任何操作(正如您所期望的那样)。
删除/[Column2]
确实会删除错误,但我终生无法弄清楚原因。
编辑:
CAST([Column2] as numeric(8))
做的伎俩。
然而,select max(len([Column2]))
最长的字段是 2 个字符长。
[Column1]
是小数 (32,0)
[Column2]
是小数 (3,0)
发生什么了?为什么这会导致问题?
你得到错误是因为基本上在最后你将一个 8 个字符长的字符串除以一个精度为 3 的数值,如下例所示
SQL Server 内部尝试并
convert
VARCHAR(8)
因DECIMAL(3,0)
您的错误而失败。CAST([Column2] as numeric(8))
之所以有效,是因为 nowVARCHAR(8)
可以转换为numeric(8)
.你真的不需要转换
DATEDIFF(week, CONVERT(date,convert(varchar(8),Column1)), GETDATE())
成VARCHAR(8)