批量删除 - 出错时,先前删除的记录是否仍被删除?

时间:2013-07-15 06:20:22

标签: tsql sql-server-2012 sql-delete

我有一张包含数百万条记录的大表。执行过程时,它会删除超过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

1 个答案:

答案 0 :(得分:1)

最终将取决于您运行此过程的事务模式。

但不要介意因为无所谓。

您唯一可以做的就是记录错误,修复错误原因,然后重新运行代码。

如果第一次运行确实删除了错误之前的记录,则重新运行程序将在删除错误时恢复。如果它没有删除记录,重新运行该程序将删除它们。