国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sql server編寫archive通用模板腳本實現自動分批刪除數據

2020-07-25 12:35:48
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗田县| 本溪| 白城市| 南宫市| 武汉市| 陆良县| 抚顺市| 应城市| 临猗县| 大埔县| 西贡区| 阿城市| 康保县| 张家界市| 阿拉善盟| 新田县| 扶沟县| 巴东县| 云霄县| 金寨县| 抚宁县| 泸西县| 临清市| 翼城县| 灵川县| 澜沧| 奈曼旗| 大荔县| 叙永县| 伊金霍洛旗| 岳池县| 迁安市| 乌苏市| 浮山县| 望谟县| 贵港市| 留坝县| 三河市| 邳州市| 房产| 峨山|