日期:2014-05-17  浏览次数:20615 次

将 numeric 转换为数据类型 varchar 时出现算术溢出错误
sqlserver2005存储过程中限制被除数不为0,局部代码如下
第 139 行
insert into #lyg
select b.sStationNO,
case when nSaleAmount=0 then 0 else substring(convert (varchar(20),(a.nMargin/a.nSaleAmount)*100),1,5)+'%' end --限制被除数不为零
from tSaleDaily a,#ly b where a.sStationNO=b.sStationNO and a.dReportDate between  dateadd(dd,-392,@BeginDate) and dateadd(dd,-364,@BeginDate)
group by b.sStationNO,a.nMargin,a.nSaleAmount
update #ly set nThisMonthMaoLiLv=a.nMaoLiLv from #lyh a,#ly b where a.sStationNO=b.sStationNO
但是执行存储过程的时候总是报错,错误如下
过程 usp_OilStationSaleMonth,第 139 行 在将 varchar 值 '21.42%' 转换成数据类型 int 时失败。

sqlserver2008 存储过程

------解决方案--------------------
带有了%就变成了字符串了,你是要把字符串带进去吗?如果是,你的#ly的字段类型不能为numeric,否则,你的#lyg插入时就不要带上%
------解决方案--------------------
改成这样:


insert into #lyg
select b.sStationNO,
case when nSaleAmount=0 then '0' else substring(convert (varchar(20),(a.nMargin/a.nSaleAmount)*100),1,5)+'%' end --限制被除数不为零
from tSaleDaily a,#ly b where a.sStationNO=b.sStationNO and a.dReportDate between  dateadd(dd,-392,@BeginDate) and dateadd(dd,-364,@BeginDate)
group by b.sStationNO,a.nMargin,a.nSaleAmount
update #ly set nThisMonthMaoLiLv=a.nMaoLiLv from #lyh a,#ly b where a.sStationNO=b.sStationNO