错误:将数字转换为数据类型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

或其他......

值得深思。

相关问题