Tsql 批量删除-出现错误时,以前删除的记录是否仍被删除?

Tsql 批量删除-出现错误时,以前删除的记录是否仍被删除?,tsql,sql-server-2012,sql-delete,Tsql,Sql Server 2012,Sql Delete,我有一张有数百万条记录的大桌子。当执行一个过程时,它会删除所有超过20分钟的记录 因为,有时需要花费很多时间,我决定使用批删除。我已经运行了一些测试,似乎我获得了20秒的优化时间,但我开始怀疑,如果在其中一个delete语句中发生错误,会发生什么情况?以前删除的记录是否仍然被删除 这是SQL语句: WHILE EXISTS (SELECT 1 FROM MyTable WHERE DATEADD(MINUTE,-20,GETUTCDATE()) > [TimeAdded])

我有一张有数百万条记录的大桌子。当执行一个过程时,它会删除所有超过20分钟的记录

因为,有时需要花费很多时间,我决定使用批删除。我已经运行了一些测试,似乎我获得了20秒的优化时间,但我开始怀疑,如果在其中一个delete语句中发生错误,会发生什么情况?以前删除的记录是否仍然被删除

这是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

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

但是不要介意,因为这不重要

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

如果第一次运行在出现错误之前确实删除了记录,则将在出现删除错误时重新运行该过程。如果没有删除记录,则重新运行该过程将删除这些记录