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

时间:2011-12-21 15:47:32

标签: sql stored-procedures

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

在此行中获取错误为什么以及应该更改什么?

CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4),((CurrentLoans.Price - PreviousLoans.Price) / PreviousLoans.Price) * 100)) 

2 个答案:

答案 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

或其他......

值得深思。