鉴于存在一个问题,即通过游标循环的SQL Server 2005上的存储过程必须每小时运行一次,并且大约需要5分钟才能运行,但是它占用了大量的处理器时间:

编辑:如果可以的话,我将删除游标,但是,我必须做大量处理并根据该行运行其他存储的proc/查询。

我可以用吗
等待延迟'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

10-04 20:55