开发者社区> 问答> 正文

WAITFOR命令

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

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

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

还是我没有看到其他解决方案?

展开
收起
心有灵_夕 2019-12-28 23:57:56 1067 0
1 条回答
写回答
取消 提交回答
  • 将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
    
    2019-12-28 23:58:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载