我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sql server中怎么实现自动分批删除数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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模板 =======================================================--【请不要修改本模板内容】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中怎么实现自动分批删除数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sql server中怎么实现自动分批删除数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sql server中实现自动编号怎么设置

在 sql server 中设置自动编号可使用 identity 属性。具体步骤包括:创建表时设置 identity(1, 1) 属性;插入数据时自动设置 id 列;使用 @@identity 查询插入的自动编号值。此外,还可设置起始值、步
sql server中实现自动编号怎么设置
2024-08-19

sql怎么配置自动删除3个月前的数据

你可以通过编写一个定时任务(cron job)来实现自动删除3个月前的数据。以下是一个示例的SQL查询,可以在定时任务中执行:DELETE FROM your_tableWHERE your_date_column < DATE_SUB
sql怎么配置自动删除3个月前的数据
2024-04-28

prometheus存储数据手动删除怎么实现

在Prometheus中手动删除数据可以通过以下步骤实现:停止Prometheus服务器:首先需要停止Prometheus服务器,以确保数据不会被修改或覆盖。删除数据文件:在Prometheus的存储路径中,通常是data/目录下,可以找到
prometheus存储数据手动删除怎么实现
2024-04-09

sql自动备份数据库怎么实现

可以通过编写一个定时脚本来实现自动备份数据库。以下是一个简单的示例脚本:创建一个备份脚本(backup.sh):#!/bin/bash# 设置数据库连接信息DB_USER="your_db_user"DB_PASS="your_db_p
sql自动备份数据库怎么实现
2024-04-09

如何在Cassandra中实现数据的自动过期和删除

在Cassandra中,可以通过TTL(Time to Live)功能实现数据的自动过期和删除。TTL是一种在插入数据时指定数据有效期的方法,一旦数据超过指定的时间后,数据将被自动删除。要在Cassandra中实现数据的自动过期和删除,可
如何在Cassandra中实现数据的自动过期和删除
2024-04-09

编程热搜

目录