WAITFOR命令

Inv*_*ter 5 sql-server

考虑到SQL Server 2005上的存储过程(循环游标)必须每小时运行一次并且运行大约需要5分钟,但它占用了大量的处理器时间:

编辑:如果可以的话,我会删除光标,不幸的是,我必须做一堆处理并根据行运行其他存储过程/查询.

我可以在每次获取之前使用WAITFOR DELAY'0:0:0.1'作为.Net的Thread.Sleep的SQL版本吗?因此,允许其他进程以此过程的执行时间为代价更快地完成.

或者是否有另一种我没有看到的解决方案?

谢谢

小智 4

将 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
Run Code Online (Sandbox Code Playgroud)