偶爾會遇到需要刪除數千萬筆等級的資料表之內部資料的情況,而通常這時候下SQL指令會遇到「刪除到連線逾時」的問題,無論你怎麼下WHERE條件就是無法順利地把資料砍掉,在這種需要超長工作時間的狀況下,正是WHILE迴圈指令的適用之處,這篇文章就是用來說明如何利用SQL的WHILE迴圈指令,順利的將數千萬筆資料進行刪除的方法。
利用迴圈大量刪除資料的SQL指令如下:
DECLARE @iRow INT DECLARE @iDel INT DECLARE @cMsg NVARCHAR(100) SET @iDel = 10000; --DeleteRowsPerTimes SET @iRow = 1; --InitialParameter WHILE @iRow <> 0 BEGIN DELETE TOP(@iDel) FROM TableWannaDelete WHERE YourCondition SET @iRow = @@ROWCOUNT SET @cMsg = 'Deleting ... ' + CONVERT(NVARCHAR(100), @iRow) RAISERROR(@cMsg, 0, 1) WITH NOWAIT END
程式碼裡面需要特別說明之處為:
下圖展示實際測試執行後的畫面,但實際上這種刪除方式應該用在百萬或千萬筆等級的資料刪除,這種幾萬筆應該下指令直接砍就可以了。