I just got surprised by something in TSQL. I thought that if xact_abort was on, calling something like
raiserror(\'Something bad happened\', 16, 1);
Use RETURN immediately after RAISERROR() and it'll not execute the procedure further.
RETURN
RAISERROR()