1. 程式人生 > 其它 >sql 迴圈條件小批量刪除語句

sql 迴圈條件小批量刪除語句

刪除記錄過程中遇到了 千萬級別以及上億資料表中要刪除一部分資料,如果 只是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_busi
WHERE 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 來釋放這點要注意~!