校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > sql server編寫archive通用模板腳本實現自動分批刪除數據

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通用模板腳本實現自動分批刪除數據,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

您可能感興趣的文章:
  • python處理數據,存進hive表的方法
  • python導出hive數據表的schema實例代碼
  • php ZipArchive實現多文件打包下載實例
  • mysql 5.7.18 Archive壓縮版安裝教程
  • mysql 5.7 zip archive版本安裝教程
  • 使用shell腳本執行hive、sqoop命令的方法
  • shell中循環調用hive sql 腳本的方法
  • hive-shell批量命令執行腳本的實現方法
  • 如何在python中寫hive腳本

標簽:威海 益陽 七臺河 防疫戰設 宿州 銅仁 來賓 天水

巨人網絡通訊聲明:本文標題《sql server編寫archive通用模板腳本實現自動分批刪除數據》,本文關鍵詞  sql,server,編寫,archive,通用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《sql server編寫archive通用模板腳本實現自動分批刪除數據》相關的同類信息!
  • 本頁收集關于sql server編寫archive通用模板腳本實現自動分批刪除數據的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 曲松县| 长汀县| 贵定县| 礼泉县| 辉县市| 新兴县| 廉江市| 上饶县| 塘沽区| 新宁县| 昭觉县| 和田市| 桓仁| 卫辉市| 新闻| 舟曲县| 怀化市| 许昌县| 平顺县| 丰宁| 当涂县| 乌拉特前旗| 安溪县| 莲花县| 墨江| 新乡县| 弋阳县| 当涂县| 肇庆市| 郎溪县| 枝江市| 凤阳县| 镇平县| 文安县| 祁连县| 江门市| 麦盖提县| 长兴县| 锡林浩特市| 花莲县| 巫山县|