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