sql 迴圈條件小批量刪除語句
阿新 • • 發佈:2021-09-03
在刪除記錄過程中遇到了 千萬級別以及上億資料表中要刪除一部分資料,如果 只是delete 一條語句執行,那就要鎖表好久而且效率也很差,
因此用此方法來執行每次小範圍的批量刪除是個好辦法~!
declare @begdate DATETIME declare @enddate DATETIME set @begdate='2020-01-05' --從0開始 set @enddate='2020-01-31' --迴圈次數 while (@begdate <= @enddate) BEGIN waitfor delay '00:00:02' --每次任務的間隔時間,避免長時間鎖表造成其他使用者的使用問題比如刪一次 停5分鐘;這裡設定的時間是間隔2秒;--SET ROWCOUNT 10 更進一步的控制每次刪除的記錄數
DELETE FROM u_sale_c WHERE busno IN (SELECT busno FROM c_org_busiWHERE area NOT IN (SELECT strctgid FROM dpt_class WHERE strclass= '條件條件')) AND accdate = @begdate SELECT @@ROWCOUNT AS DelRows --列印執行結果 SET @begdate = dateadd (DAY, 1, @begdate) END
還有一種解決方法是 set rowcount 10 這種方法在當前的 連線中 會對所有的執行語句都 只列出前10條(跟臨時表的作用範圍相似),處理完後要set rowcount 0 來釋放這點要注意~!