考虑到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)
| 归档时间: |
|
| 查看次数: |
2633 次 |
| 最近记录: |