Purpose of Try/Catch without Transactions
IMHO Using a TRY/CATCH block you don't need to check every single operation.

DELETE FROM Foo;
IF @@ERROR &lt;&gt; 0
BEGIN
    RAISERROR('Error deleting table Foo', 16, 1);
    RETURN -1;
END

OR

DELETE FROM Bar;
IF @@ERROR &lt;&gt; 0
BEGIN
    SET @ErrMsg = 'Error';
    GOTO ERROR;
END