错误:将数字转换为数据类型varchar的算术溢出错误。
在此行中获取错误为什么以及应该更改什么?
CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4),((CurrentLoans.Price - PreviousLoans.Price) / PreviousLoans.Price) * 100))
答案 0 :(得分:31)
至少有一个问题:
CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4))
Decimal(8,4)
表示8位数字,小数点右边4位。这会对实际的十进制字符进行 NOT 说明,因此您可能会使用如下值:
1234.5678
这是有效的Decimal(8,4)
,但不适合varchar(8)
。
答案 1 :(得分:1)
我知道这是一个老帖子,但我只想说谢谢。我遇到了这个确切的问题,最令人讨厌的是它从VIEW中选择时出错,但是当我使用VIEW中的select语句粘贴并将其插入TEMP TABLE时没有给出错误!
示例:
select * from dvView --worked
select * from dvView where product = '5' --Broke!
--BUT
select * from #Temp_table_dvView --worked!
select * from #Temp_table_dvView where product = '5' --worked!
最后,我不得不改变视图中的一部分
select cast(productNumber as nvarchar(1), etc...
到
select cast(productNumber as nvarchar(2), etc...
并且有效。
但奇怪的是我得到的错误是
Arithmetic overflow error converting numeric to data type varchar.
而不是读取
的那个Data would be truncated
或其他......
值得深思。