我有一个非常大的表,所以我用以下命令来删除旧条目: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