I found and article in the MSDN Lbrary explaining that try/catch does not handle errors thrown when an object cannot be found. SO, even though I wrap a transaction in a try/catch, the rollback phrase will not execute:
BEGIN TRY BEGIN TRANSACTION SELECT 1 FROM dbo.TableDoesNotExists PRINT ' Should not see this' COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION SELECT ERROR_MESSAGE() END CATCH --PRINT 'Error Number before go: ' + CAST(@@Error AS VARCHAR) go PRINT 'Error Count After go: ' + CAST(@@Error AS VARCHAR) PRINT 'Transaction Count ' + CAST(@@TRANCOUNT AS VARCHAR) What's the recommended way to handle errors thrown when an object does not exists, especially when there is a transaction involved. Should I tack this bit of code in place of the last two print statements:
IF @@ERROR <> 0 AND @@TRANCOUNT > 0 BEGIN PRINT 'Rolling back txn' ROLLBACK TRANSACTION END go PRINT 'Transaction Count again: ' + CAST(@@TRANCOUNT AS VARCHAR)