• Mike nailed it pretty well. I can't add much.

    But I'll say this. Imagine a piece of TSQL code that, let's say, inserts data into three tables. You can put a TRY statement at the beginning and a CATCH statement at the end. Alternatively you can capture @@ERROR over and over again, including code using a GOTO to get to the error handler, all messy. Further, each and every statement, including checking @@ERROR resets @@ERROR so you can easily lose the error values.

    It's just a mess. TRY/CATCH is a huge leap forward.

    "The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood"
    - Theodore Roosevelt

    Author of:
    SQL Server Execution Plans
    SQL Server Query Performance Tuning