如题。我现在做法是用while按时间段(d1,d2...dn)收集到临时的#t_tmp,每次while末尾把#t_tmp加入到#t,目的是想避免过长时间锁定实表,可是这样做还是自己还其他用户卡死。请教我的思路对不对的?有什么好方法分拆这种中大型select?谢谢指点。
目前过程像这样:
declare @d1 datetime, @d2 datetime, @d_max datetime, @no int;
……
while (@d2 < @d_max) begin
insert into #t_tmp(....) select ... from @T where ...; -- 条件是@d1和@d2之间
insert into #t(...) select ... from #t_tmp;
set @no = 0;
while (@no < 100000) begin
set @no = @no + 1; -- 用while做延时,有用么?
end;
set @d1 = @d1 + Δt;
set @d2 = @d1 + Δt;
end;
------解决思路----------------------
查询加上With(NoLock),应该不存在你说的问题,除非服务器性能不行
------解决思路----------------------
要延时应该用
WAITFOR DELAY '00:00:05'--等待5秒
然后怕锁表可以用WITH(NOLOCK)
最后,你这样WHILE想实现什么呢
------解决思路----------------------
WAITFOR DELAY '00:00:05'--等待5秒 -------------这个回话都会停下来