我有一個非常大的表,所以我用以下命令來刪除舊條目:SQL Server的批量刪除使用while循環沒有工作
WHILE (@@ROWCOUNT > 0)
BEGIN
DELETE TOP (5000) FROM myTable
WHERE date < 20130103
END
我曾嘗試使用不同的日期該跑幾次。有時它可以正常工作(大約需要20分鐘),但其他時間查詢立即結束,沒有任何內容被刪除。當發生這種情況時,我只需從該表中做一個簡單的SELECT語句,然後再次嘗試上面的WHILE語句,然後它就可以工作!任何人都知道這是爲什麼?我需要自動執行此查詢以定期運行以控制表的大小,但是我想確保它在運行時實際刪除正確。謝謝。
不宜日期寫爲''2013-01-03'',而不是爲一個數字? – 2013-03-21 21:10:31
有趣的是,每一個答案完全錯過了。 – 2013-03-21 21:29:48
另請注意,只是進行循環並不一定會降低對日誌或併發的影響,具體取決於它是否是單個事務。我將停止使用@@ ROWCOUNT進行控制,在循環內添加事務,並設置一個變量= @@ ROWCOUNT。請參閱http://www.sqlperformance.com/2013/03/io-subsystem/chunk-deletes – 2013-03-21 21:37:27