XACT_ABORT and Transaction

Specifies whether SQL Server automatically rolls back the current transaction when a Transact-SQL statement raises a run-time error. The THROW statement honors SET XACT_ABORT. RAISERROR does not. New applications should use THROW instead of RAISERROR. When SET XACT_ABORT is ON, if a Transact-SQL statement raises a run-time error, the entire transaction is terminated and rolled... » read more

Begin Tran with Error

Transactions are intended to run completely or not at all. The only way to complete a transaction is to commit, any other way will result in a rollback. Therefore, if you begin and then not commit, it will be rolled back on connection close (as the transaction was broken off without marking as complete). As... » read more