鉴于存在一个问题,SQL Server 2005上的存储过程(通过游标循环)必须每小时运行一次,并且大约需要5分钟才能运行,但是它占用了大量的处理器时间:
编辑:如果可以的话,我将删除游标,但是,我必须做大量处理并根据该行运行其他存储的proc /查询。
我可以在每次获取之前使用WAITFOR DELAY'0:0:0.1'作为.Net的Thread.Sleep的SQL版本吗?因此,其他进程可以更快地完成,但要以该过程的执行时间为代价。
还是我没有看到其他解决方案?
将WAITFOR放入循环中确实会减慢循环速度,并允许其他事情更快进行。您可能还考虑了WHILE循环而不是游标-以我的经验,它运行得更快。您可能还考虑将光标移动到快速前进的只读光标-这样可以限制占用的内存量。
declare @minid int, @maxid int, @somevalue int
select @minid = 1, @maxid = 5
while @minid <= @maxid
begin
set @somevalue = null
select @somevalue = somefield from sometable where id = @minid
print @somevalue
set @minid = @minid + 1
waitfor delay '00:00:00.1'
end
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。