何百万ものレコードを含む大きなテーブルがあります。プロシージャが実行されると、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