算术溢出错误将varchar转换为存储过程中的数据类型numeric

时间:2013-12-11 10:03:40

标签: sql sql-server sql-server-2008

我收到了将varchar转换为数据类型numeric的算术溢出错误。在我的存储 程序,虽然只有在必须进行计算时。这是我的代码,我使用转换器似乎仍然是错误的。

set @Text = @Text + 'Something:' + 
(select case when s.ATF = '' then '0' 
else Convert(varchar,100 *((s.ATF *1.00) /     
(s.Total * 1.00))) + '%' 
end 
from Maintenance.dbo.stats s 
where s.ID = @ID) + CHAR(13) + CHAR(10)

感谢名单!

1 个答案:

答案 0 :(得分:1)

问题是你拿一个varchar并乘以一个数值。这会强制隐式转换为数字类型。您应该明确指定转换。我选择了decimal(38,6),但你可以改变它。

set @Text = @Text + 'Something:' + 
(select case when s.ATF = '' then '0' 
else Convert(varchar, 100 * cast(s.ATF as decimal(38,6)) /     
cast(s.Total as decimal(38,6))) + '%' 
end 
from Maintenance.dbo.stats s 
where s.ID = @ID) + CHAR(13) + CHAR(10)

你可以看到这个错误的转换如何在这个简单的例子上起作用:

declare @x as varchar(50) = '11'
select @x * 1.00