sql 循环条件小批量删除语句

删除记录过程中遇到了 千万级别以及上亿数据表中要删除一部分数据,如果 只是delete 一条语句执行,那就要锁表好久而且效率也很差,

因此用此方法来执行每次小范围的批量删除是个好办法~!

 

复制代码
declare @begdate DATETIME
declare @enddate DATETIME

set @begdate='2020-01-05'  --从0开始
set @enddate='2020-01-31'  --循环次数


    while (@begdate <= @enddate)
    
    BEGIN
    
        waitfor delay '00:00:02'  --每次任务的间隔时间,避免长时间锁表造成其他用户的使用问题比如删一次 停5分钟;这里设置的时间是间隔2秒;
        
              --SET ROWCOUNT 10  更进一步的控制每次删除的记录数
DELETE FROM u_sale_c WHERE busno IN (SELECT busno FROM c_org_busi WHERE area NOT IN (SELECT strctgid FROM dpt_class WHERE strclass = '条件条件')) AND accdate = @begdate SELECT @@ROWCOUNT AS DelRows --打印执行结果 SET @begdate = dateadd (DAY, 1, @begdate) END
复制代码

 

还有一种解决方法是 set rowcount 10 这种方法在当前的 连接中 会对所有的执行语句都 只列出前10条(跟临时表的作用范围相似),处理完后要 set rowcount 0 来释放 这点要注意~!

 

posted @   茶叶蛋蛋  阅读(600)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示