我有一张包含数百万条记录的大表。执行过程时,它会删除超过20分钟的所有记录。
因为有时需要花费很多时间,所以我决定使用批量删除。我已经运行了一些测试,似乎我获得了20秒的优化,但我开始怀疑,如果在其中一个删除语句中发生错误将会发生什么 - 先前删除的记录是否被删除?
这是SQL语句:
WHILE EXISTS (SELECT 1 FROM MyTable WHERE DATEADD(MINUTE,-20,GETUTCDATE()) > [TimeAdded])
BEGIN
DELETE TOP (500000)
FROM MyTable
WHERE DATEADD(MINUTE,-20,GETUTCDATE()) > [TimeAdded]
IF @@ERROR <> 0
BEGIN
RAISERROR (N'Delete operation from ''MyTable'' table failed.',10,0)
BREAK
END
END
答案 0 :(得分:1)
最终将取决于您运行此过程的事务模式。
但不要介意因为无所谓。
您唯一可以做的就是记录错误,修复错误原因,然后重新运行代码。
如果第一次运行确实删除了错误之前的记录,则重新运行程序将在删除错误时恢复。如果它没有删除记录,重新运行该程序将删除它们。