Czy próbowałeś ustawić XACT_ABORT
na początku skryptu?
SET XACT_ABORT ON
Niezwiązane, ale nie można zapisać pętli jako:
-- Continue looping while rows exist
WHILE EXISTS (SELECT 1 FROM [LINKEDSERVER].MasterDatabase.dbo.Logging WITH(NOLOCK)
WHERE [Date] < @ArchiveDate)
Lub jeszcze lepiej, przepisz, aby nie uderzać w tabelę połączoną dwa razy podczas iteracji pętli.