千家信息网

sql server编写archive通用模板脚本如何实现自动分批删除数据

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章主要介绍了sql server编写archive通用模板脚本如何实现自动分批删除数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一
千家信息网最后更新 2024年11月19日sql server编写archive通用模板脚本如何实现自动分批删除数据

这篇文章主要介绍了sql server编写archive通用模板脚本如何实现自动分批删除数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

做过比较多项目的archive脚本编写,对于这种删除数据的脚本开发,肯定是一开始的话用最简单的一个delete语句,然后由于部分表数据量比较大啊,索引比较多啊,会发现删除数据很慢而且影响系统的正常使用。然后就对delete语句进行按均匀数据量分批delete的改写,这样的话,原来的删除一个表用一个语句,就可能变成几十行,如果archive的表有十几个甚至几十个,那我们的脚本篇幅就非常大了,增加了开发和维护的成本,不利于经验比较少的新入职同事去开发archive脚本,也容易把注意力分散到所谓分批逻辑中。

  根据这种情况,编写了一个自动分批删除数据的模板,模板固定不变,只需要把注意力集中放在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编写archive通用模板脚本如何实现自动分批删除数据"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

数据 脚本 参数 语句 模板 篇文章 逻辑 开发 代码 情况 注意力 里加 参考 这样的话 价值 信息 兴趣 内容 变量 同事 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 餐饮软件开发有没有前途 贵州专业网络技术服务市场价 淄博服装库存软件开发公司 零点股票配资软件开发 网络安全征文带标题 未来数据库建设 数据库元数据包括哪些 简易的零信任网络安全 中科院科学资源数据库 深圳盘古网络技术有限公司 市场购物软件开发 文明上网网络安全班会ppt 中科大网络安全课件 光遇连不上服务器怎么回事 陕西钣金服务器机柜云主机 火山软件开发平台官网下载 pm2数据库连接共享 高校网络安全职责 成都供应商的管理软件开发公司 网络安全大赛需要什么技术 揭西县天气预报软件开发 明日之后三个字的服务器哪个好 淄博服装库存软件开发公司 全国学习网络技术平台 互联网网络安全产品有哪些 lol警备服务器延迟 电力行业日志审计服务器收费 中华人民共和国网络安全教育法 ibm新服务器RAID5阵列 天津市完美互联网络技术咨询
0