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 来释放 这点要注意~!

 

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

上一篇:sql查询 行转列


下一篇:TP5.0 防止xss攻击,SQL注入