在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

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

122次阅读
没有评论

共计 2622 个字符,预计需要花费 7 分钟才能阅读完成。

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2622字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚州精品一区中文字幕乱码 | 国产精品二区一区二区aⅴ污介绍 | 怡红院av亚洲一区二区三区h | 极品人妻被黑人中出种子 | 国产免费午夜a无码v视频 | 国产精品综合一区二区三区 | 国产色系视频在线观看免费 | 国产精品久久久久久av | 大肉大捧一进一出好爽视频mba | 亚洲熟妇av综合网 | 特级aaa片毛片免费观看 | 欧美日韩精品在线 | 好了av在线第四综合网站 | 亚洲精品午睡沙发系列 | 成人免费观看视频高清视频 | 泰国一级特黄在线观看大片 | 校园激情亚洲 | 国语高清精品一区二区三区 | 欧美猛男军警gay自慰 | 福利影院在线观看 | 国产或人精品日本亚洲77美色 | 性生交大片免费看女人按摩摩 | 国产一区欧美 | 午夜成人理论无码电影在线播放 | 国产精品日产三级在线观看 | 中无码人妻丰满熟妇啪啪 | 亚洲h视频在线观看 | 玖玖射 | 亚洲国产一级毛片 | 亚洲乱码一二三四区国产 | 高清午夜线观看免费 | 国产精品乱码一区二区三区 | 777777农村一级毛片 | 欧美3p精品三区 | 亚洲精品久久久 | 中文字幕精品一区二区2021年 | 亚洲午夜av久久久精品影院 | 黄色在线免费视频 | 免费国产成人高清在线观看不卡 | 国产精品久久国产精品99 | 三级黄色录像视频 |