sqlserver完全删除教程(sql server编写archive通用模板脚本实现自动分批删除数据)
类别:数据库 浏览量:2699
时间:2021-10-18 11:45:26 sqlserver完全删除教程
sql server编写archive通用模板脚本实现自动分批删除数据博主做过比较多项目的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_Part2 2. 组装的参数@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,后面取每批删除行数@@ROWCOUNT print convert(varchar(50), getdate(), 121) + @strStepInfo while @iRowCount <> 0 begin 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 + 1 end' -- ===== 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_Part2 print @sql exec 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_Part2 print @sql exec sp_executesql @sql, @parameters, N' 3 archive 表B', @ArchiveDate
总结
以上所述是小编给大家介绍的sql server编写archive通用模板脚本实现自动分批删除数据,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
您可能感兴趣
- mysql 命令与sqlserver的区别大么(MySQL系列之执行SQL 语句时发生了什么?)
- mysql 内置函数
- 配置mysql可以远程登录(开启MySQL远程连接的方法)
- python导出数据到mysql(python定时按日期备份MySQL数据并压缩)
- Sql Server判断函数、存储过程等是否存在
- mysql数据库基本使用方法(详解MySQL 数据库范式)
- sqlserver数据库基本操作(SQL Server四个系统表的知识讲解)
- Sql如何删除重复记录
- mysql用户删除了如何设置(MySQL两种删除用户语句的区别delete user和drop user)
- 升级mysql客户端版本(超详细教你怎么升级Mysql的版本)
- SQL Server遍历表中记录的方法
- SQL Server中查看未释放的游标
- mac更改mysql密码(Mac下mysql 8.0.22 找回密码的方法)
- kettle替换sql语句(sql server定时作业调用Kettle job出错的快速解决方法)
- sql数值函数大全(sql中mod函数取余数的用法)
- sql数据分页怎么查询(SQL数据分页查询的方法)
- TVB新剧《黯夜守护者》将播,陈展鹏陈炜首次合作探讨人性(TVB新剧黯夜守护者将播)
- 新晋小花被称女版吴卓羲 将取代滕丽名成为TVB新一代御用女警(新晋小花被称女版吴卓羲)
- 艺人吴卓羲10年警察生涯,演足10年阿Sir,系咩玩法(艺人吴卓羲10年警察生涯)
- 菲律宾潜水(菲律宾潜水价格)
- 泰国人妖(变性手术生殖器要割掉吗)
- 泰国美女(泰国人妖和女性如何区分)
热门推荐
- php安全攻防(phpstudy linux小皮面板怎么防cc攻击)
- python图像仿射变换(详解Python计算机视觉 图像扭曲仿射扭曲)
- pythonssl版本(解决Python 使用h5py加载文件,看不到keys的问题)
- python怎么导入函数pandas(python将pandas datarame保存为txt文件的实例)
- xampp安装后启动apache弹出对话框(XAMPP下使用顶级域名绑定虚拟主机的配置方法和示例)
- dedecms导航条长度(去掉dedecms友情链接中的LI标签的方法)
- 纯css实现多级菜单(纯CSS实现可折叠树状菜单)
- python语言提供的3种基本数据类型(详解Python3 基本数据类型)
- 在css中width是什么意思(Css深刻理解width:auto的用法)
- python3语法规则(详解Python3注释知识点)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9