博主作过比较多项目的archive脚本编写,对于这种删除数据的脚本开发,确定是一开始的话用最简单的一个delete语句,而后因为部分表数据量比较大啊,索引比较多啊,会发现删除数据很慢并且影响系统的正常使用。而后就对delete语句进行按均匀数据量分批delete的改写,这样的话,原来的删除一个表用一个语句,就可能变成几十行,若是archive的表有十几个甚至几十个,那咱们的脚本篇幅就很是大了,增长了开发和维护的成本,不利于经验比较少的新入职同事去开发archive脚本,也容易把注意力分散到所谓分批逻辑中。sql
根据这种状况,本周博主(zhang502219048)恰好在工做过程当中,总结并编写了一个自动分批删除数据的模板,模板固定不变,只须要把注意力集中放在delete语句中,而且能够在delete语句中控制每批删除的数据量,比较方便,经过变量组装模板sql,避免每一个表就单独写一个分批逻辑的重复代码,化简为繁,增长分批删除一个表指定数据的话只须要增长几行代码就能够(以下所示中的demo1和demo2)。ide
demo1:带参数,根据Date字段是否过时删除表B对应数据。spa
demo2:不带参数,根据表tmp_Del删除表A对应ID的数据。索引
具体请参考下面的脚本和相关说明,若有不懂的地方欢迎评论或私信咨询博主。 图片
( ( ( ( ( () N N , N , sp_executesql , , N, , out , sp_executesql , , N, , out