Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Die Aktualisierungsabfrage für Millionen von Zeilen füllt das Transaktionsprotokoll

Am Ende hat das Beispiel, das ich bereits geschrieben hatte, am besten funktioniert; Ein Transaktionsprotokoll-Voll-Fehler wird im Catch abgefangen und 15 Minuten sind lang genug, um das Protokoll zu recyceln.

DECLARE 
    @AffectedRows int 

SET @AffectedRows = 0 

WHILE @AffectedRows < @RowsToUpdate 
BEGIN 
    BEGIN TRY 
        BEGIN TRAN 
        -- Do some updates   
        SET @AffectedRows = @AffectedRows + @@RowCount 
        COMMIT TRAN 
    END TRY 
    BEGIN CATCH 
        PRINT ERROR_MESSAGE() 
        WAITFOR DELAY '00:15:00' 
    END CATCH 
END 

PRINT @AffectedRows