sql server中怎么实现自动分批删除数据
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章给大家介绍sql server中怎么实现自动分批删除数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。博主做过比较多项目的archive脚本编写,对于这种删除数据的脚本开
千家信息网最后更新 2024年11月23日sql server中怎么实现自动分批删除数据
这篇文章给大家介绍sql server中怎么实现自动分批删除数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
博主做过比较多项目的archive脚本编写,对于这种删除数据的脚本开发,肯定是一开始的话用最简单的一个delete语句,然后由于部分表数据量比较大啊,索引比较多啊,会发现删除数据很慢而且影响系统的正常使用。然后就对delete语句进行按均匀数据量分批delete的改写,这样的话,原来的删除一个表用一个语句,就可能变成几十行,如果archive的表有十几个甚至几十个,那我们的脚本篇幅就非常大了,增加了开发和维护的成本,不利于经验比较少的新入职同事去开发archive脚本,也容易把注意力分散到所谓分批逻辑中。
根据这种情况,本周博主(zhang502219048)刚好在工作过程中,总结并编写了一个自动分批删除数据的模板,模板固定不变,只需要把注意力集中放在delete语句中,并且可以在delete语句中控制每批删除的数据量,比较方便,通过变量组装模板sql,避免每个表就单独写一个分批逻辑的重复代码,化简为繁,增加分批删除一个表指定数据的话只需要增加几行代码就可以(如下所示中的demo1和demo2)。
demo1:不带参数,根据表tmp_Del删除表A对应ID的数据。
demo2:带参数,根据Date字段是否过期删除表B对应数据。
具体请参考下面的脚本和相关说明,如有不懂的地方欢迎评论或私信咨询博主。
-- ===== 1 分批archive模板 =======================================================--【请不要修改本模板内容】/* 说明:1. 组装的archive语句为:@sql = @sql_Part1 + @sql_Del + @sql_Part22. 组装的参数@parameters为:@parameters = @parameters_Base + 自定义参数3. 传入参数:@strStepInfo 需要print的step信息4. archive逻辑专注于@sql_Del,而非分散于分批。*/declare @parameters nvarchar(max) = '', @parameters_Base nvarchar(max) = N'@strStepInfo nvarchar(100)', @sql nvarchar(max) = '', @sql_Part1 nvarchar(max) = N'declare @iBatch int = 1, --批次 @iRowCount int = -1 --删除行数,初始为-1,后面取每批删除行数@@ROWCOUNTprint convert(varchar(50), getdate(), 121) + @strStepInfowhile @iRowCount <> 0begin print ''begin batch:'' print @iBatch print convert(varchar(50), getdate(), 121) begin try begin tran', @sql_Del nvarchar(max) = '' --@sql_Del脚本需要根据实际情况在后续脚本中自行编写, @sql_Part2 nvarchar(max) = N' select @iRowCount = @@rowcount commit tran end try begin catch rollback tran print ''-- Error Message:'' + convert(varchar, error_line()) + '' | '' + error_message() end catch waitfor delay ''0:00:01'' --延时 print convert(varchar(50), getdate(), 121) print ''end batch'' select @iBatch = @iBatch + 1end'-- ===== 2 demo1(delete语句不含参数):archive 表A =======================================================select @parameters = @parameters_Base + '' --如果有需要增加自定义参数,在这里加,例如@parameters = @parameters_Base + ', @ArchiveDate datetime', @sql_Del = ' delete top (50000) tc_Del from 表A tc_Del inner join tmp_Del cd on cd.ID = tc_Del.ID'select @sql = @sql_Part1 + @sql_Del + @sql_Part2print @sqlexec sp_executesql @sql, @parameters, N' 2 archive 表A'-- ===== 3 demo2(delete语句含参数):archive 表B =======================================================select @parameters = @parameters_Base + ', @ArchiveDaate datetime' --如果有需要增加自定义参数,在这里加,例如@parameters = @parameters_Base + ', @ArchiveDate datetime', @sql_Del = ' delete top (50000) from 表B where Date < @ArchiveDate'select @sql = @sql_Part1 + @sql_Del + @sql_Part2print @sqlexec sp_executesql @sql, @parameters, N' 3 archive 表B', @ArchiveDate
关于sql server中怎么实现自动分批删除数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数据
参数
语句
脚本
模板
内容
逻辑
开发
代码
情况
更多
注意力
里加
参考
帮助
不错
这样的话
信息
兴趣
变量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
校园网络安全宣传报道链接
宝鸡软件开发服务价格
博客网络安全教育教学设计
GTA5服务器错误是什么意思
杭州知协网络技术有限公司app
投资评估数据库需要什么条件
岳阳管理软件开发价格
米阅网络安全
全国大学生网络安全竞赛能答几次
网络安全知识竞赛登录入口
软件服务器安全设置解决方案
网络安全攻防意义
软件开发人员创业合作
网络安全管理机制
计算机网络技术专业薪资
数据库制作所需技术
怎么找到我的世界的服务器
歌尔软件开发工资
产品经理会了解数据库
如何把靶场部署在服务器上
数据库系统概论题库
北京软件开发价格标准
网络安全的认识心得
武汉软件开发定制费用
服务器多用户安全
包含哪些方面安全数据库
国税局贯彻网络安全法
济南质量好的服务器多少钱
有关计算机网络安全的论文
闪电网络技术