0

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

1 回答 1

1

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

但不要介意,因为这无关紧要。

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

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

于 2013-07-15T07:06:08.453 回答