You get the idea. Operations on table variables don't get rolled back . Just backfill your log from the table variable and you know how far your transaction got. Of course you have to remember, that all entries in the log preceeding the error were rolled back. If you clear the runtime error on line 26, the transaction is committed and life goes on.