久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

sql server中怎么實現自動分批刪除數據

154次閱讀
沒有評論

共計 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字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 芦山县| 博爱县| 平南县| 香格里拉县| 德兴市| 北辰区| 当涂县| 宁都县| 永吉县| 南阳市| 怀仁县| 慈溪市| 哈密市| 商洛市| 隆昌县| 余姚市| 浦城县| 保康县| 兴安县| 莎车县| 海淀区| 象山县| 麻江县| 政和县| 三河市| 灌阳县| 顺义区| 北川| 清镇市| 柳林县| 淳安县| 石台县| 安阳市| 诸城市| 疏勒县| 马尔康县| 肃南| 浮山县| 青阳县| 镇原县| 子长县|