设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1259|回复: 0

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

[复制链接]

36

主题

375

金钱

563

积分

初级用户

发表于 2019-10-14 16:08:20 | 显示全部楼层 |阅读模式

  1. -- ===== 1 分批archive模板 =======================================================
  2. --【请不要修改本模板内容】
  3. /*
  4. 说明:
  5. 1. 组装的archive语句为:@sql = @sql_Part1 + @sql_Del + @sql_Part2
  6. 2. 组装的参数@parameters为:@parameters = @parameters_Base + 自定义参数
  7. 3. 传入参数:@strStepInfo 需要print的step信息
  8. 4. archive逻辑专注于@sql_Del,而非分散于分批。
  9. */
  10. declare @parameters nvarchar(max) = ''
  11. , @parameters_Base nvarchar(max) = N'@strStepInfo nvarchar(100)'
  12. , @sql nvarchar(max) = ''
  13. , @sql_Part1 nvarchar(max) = N'
  14. declare @iBatch int = 1,   --批次
  15.     @iRowCount int = -1 --删除行数,初始为-1,后面取每批删除行数@@ROWCOUNT
  16. print convert(varchar(50), getdate(), 121) + @strStepInfo
  17. while @iRowCount <> 0
  18. begin
  19.   print ''begin batch:''
  20.   print @iBatch
  21.   print convert(varchar(50), getdate(), 121)
  22.   begin try
  23.     begin tran
  24. '
  25. , @sql_Del nvarchar(max) = '
  26. ' --@sql_Del脚本需要根据实际情况在后续脚本中自行编写
  27. , @sql_Part2 nvarchar(max) = N'  
  28.       select @iRowCount = @@rowcount
  29.     commit tran
  30.   end try
  31.   begin catch
  32.     rollback tran
  33.     print ''-- Error Message:'' + convert(varchar, error_line()) + '' | '' + error_message()
  34.   end catch
  35.   waitfor delay ''0:00:01'' --延时
  36.   print convert(varchar(50), getdate(), 121)
  37.   print ''end batch''
  38.   select @iBatch = @iBatch + 1
  39. end'
  40. -- ===== 2 demo1(delete语句不含参数):archive 表A =======================================================
  41. select @parameters = @parameters_Base + '' --如果有需要增加自定义参数,在这里加,例如@parameters = @parameters_Base + ', @ArchiveDate datetime'
  42. , @sql_Del = '
  43.       delete top (50000) tc_Del
  44.       from 表A tc_Del
  45.       inner join tmp_Del cd on cd.ID = tc_Del.ID
  46. '
  47. select @sql = @sql_Part1 + @sql_Del + @sql_Part2
  48. print @sql
  49. exec sp_executesql @sql, @parameters, N' 2 archive 表A'
  50. -- ===== 3 demo2(delete语句含参数):archive 表B =======================================================
  51. select @parameters = @parameters_Base + ', @ArchiveDaate datetime' --如果有需要增加自定义参数,在这里加,例如@parameters = @parameters_Base + ', @ArchiveDate datetime'
  52. , @sql_Del = '
  53.       delete top (50000)
  54.       from 表B
  55.       where Date < @ArchiveDate
  56. '
  57. select @sql = @sql_Part1 + @sql_Del + @sql_Part2
  58. print @sql
  59. exec sp_executesql @sql, @parameters, N' 3 archive 表B', @ArchiveDate
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表