porque 2?
no hace falta, el manejo de errores de SQL Server es una porquería... lo que yo hago es esto.
inicia la transacción una sola vez.
con 2 transact supongo que queres decir que haces 2 operaciones, (update, insert, etc)
entonces seria:
BEGIN TRANSACTION
/* ACA ADENTRO HACE TODAS LAS OPERACIONES QUE QUIERAS, UPDATE,
INSERT, DELETE, PERO LUEGO DE CADA UNA DE ELLAS PONES ESTA LINEA
SELECT @LastError=@@ERROR
IF @LastError != 0 GOTO HANDLE_ERROR
Y LUEGO SIGUES HACIENDO LAS OTRAS OPERACIONES.
ENTONCES, SI ESA OPERACION SALIO MAL, VAS A HANDLE_ERROR Y HACES UN ROLLBACK
O SEA, O SALE TODO BIEN, O NO HACE NADA*/
COMMIT TRAN
GOTO SALIR
HANDLE_ERROR:
ROLLBACK TRAN
SELECT @LastError
SALIR: