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 来释放 这点要注意~!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了