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

数据类型 varchar 和 varchar 在 modulo 运算符中不兼容。
ALTER proc [dbo].[Get_DispatchingList]
(
  @Stime datetime,   
  @Etime datetime, 
  @Rid int
)
as
begin
declare @strsql varchar(8000) 
  set @strsql ='dbo.F_FindParentDeptNameByRepositoryId(r.id) as RepositoryName, isnull(d.Num,0) as OutNmu, isnull(c.Num,0)as inNum,
 isnull(e.num,0) as Days,convert(varchar(50), case when a.num is null then 0 else case when b.num is null then 100 else round((isnull(a.num,0)*100)/(isnull(a.num,0)+isnull(b.num,0))*1,0)
        end end )+ '%'as AccuracyRate  
from RepositoryInfo r left join DispatchingList d1 on d1.outRepId=r.id  
left join DispatchingList d2 on d2.inRepId=r.id 
left join orderinfo d3 on d1.orderinfoId=d3.id 
left outer join (select  d4.inrepId,isnull(avg(datediff(day,d3.finishedtime,d4.confirmTime)+1),0) as num 
from DispatchingList d4 left join orderinfo d3 on d4.orderinfoId=d3.id where d4.status=2 and d4.confirmTime>=@Stime  AND d4.confirmTime<=@Etime  group by d4.inrepId) e on r.id=e.inrepId 
left outer join (select outrepId,sum(outnum) as num from DispatchingList where status=2 and confirmTime>=@Stime  AND confirmTime<=@Etime  group by outrepId) d on r.id=d.outrepId 
left outer join (select inrepId,sum(outnum) as num from DispatchingList where status=2 and confirmTime>=@Stime  AND confirmTime<=@Etime group by inrepId) c on r.id=c.inrepid  
left outer join (select inrepId,count(1) as num from DispatchingList where status=2 and confirmTime>=@Stime  AND confirmTime<=@Etime  group by inrepId) a on r.id=a.inrepid 
left outer join (select inrepId,count(1) as num from DispatchingList where status=4 and confirmTime>=@Stime  AND confirmTime<=@Etime group by inrepId) b on r.id=b.inrepid   
WHERE  R.Id=@Rid and d1.confirmTime>=@Stime  AND d1.confirmTime<=@Etime  or d2.confirmTime>=@Stime  AND d2.confirmTime<=@Stime  
group by r.id,a.num,b.num,e.num,d.num,c.num  order by r.id desc'
exec (@strsql)

end
------解决方案--------------------
改为nvarchar类型试试