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 に答える