用正确的方法去解决问题

平台上有个服务,工作流程是前台用户将信息提交队列中,后台服务读取队列并完成相应的操作。最近有用户反映说服务很慢,提交了很久都未操作完成,查看了下队列,发现是提交时一些参数丢失了,由于信息不全,导致队列一直未被处理:



既然丢失了,先得想办法看能不能修复,因为Resid和SoftVer是多对一的关系,同样的Resid其他用户有提交成功过,所以修复SoftVer的值并不困难,写了个存储过程来完成:

declare @resid int,@softver int
declare err cursor for select resid from mz_queuetb where status=0 and softver=0 group by resid
open err
fetch next from err into @resid
while @@fetch_status=0
begin
    select top 1 @softver=softver from mz_queuetb where status=1 and resid=@resid order by id desc
    update mz_queuetb set softver=@softver where status=0 and softver=0 and resid=@resid
    fetch next from err into @resid
end
close err
deallocate err

后来再遇上这问题就手动执行下存储过程,今天想不如写个小程序来定时执行这个存储过程吧,但突然意识到这思路有问题,本末倒置了,存储过程虽能解决问题,但只是治标不治本的方法,正确的应是在前台对提交的信息进行验证,信息不全时阻止提交到队列并提示用户重新提交,这样只是一点小修改就可以了。

评论: 0 | 引用: 0 | 查看次数: 3633
发表评论
登录后再发表评论!