title: writing a transaction in t-sql and error handling
body: <p>Do u think there is a better way to write a transaction in t-sql?  Is there a better approach that improves maintainability and performance of the application that uses this transaction?</p>
  
  <pre><code>-- Description: Insert email Receiver under specified subject
  -- =============================================
  ALTER PROCEDURE [Contact].[Receiver_stpInsert]
      @First_Name nvarchar(30),
      @Last_Name nvarchar(30),
      @Email varchar(60),
      @Subject_Id int
  AS
  BEGIN   
      SET NOCOUNT ON;
  
      DECLARE @error_num int;
  
  
      BEGIN TRANSACTION 
  
      INSERT INTO Contact.Receiver(First_Name, Last_Name, Email) VALUES(@First_Name, @Last_Name, @Email); 
  
      SET @error_num = @@ERROR;
      IF (@error_num &lt;&gt; 0)
          BEGIN
              ROLLBACK;
              RETURN;
          END
  
      DECLARE @rec_record_id int;
      SET @rec_record_id = (SELECT Record_Id FROM Contact.Receiver WHERE Email = @Email);
  
      SET @error_num = @@ERROR;
      IF (@error_num &lt;&gt; 0)
          BEGIN
              ROLLBACK;
              RETURN;
          END
  
      INSERT INTO Contact.Receiver_Subject(Receiver_Id, Subject_Id) VALUES(@rec_record_id, @Subject_Id);
  
      SET @error_num = @@ERROR;
      IF (@error_num &lt;&gt; 0)
          BEGIN
              ROLLBACK;
              RETURN;
          END
  
      SET @error_num = @@ERROR;
      IF (@error_num &lt;&gt; 0)
          BEGIN
              ROLLBACK;
              RETURN;
          END
      ELSE
          BEGIN   
              Commit;
  
          END
  
  END
  </code></pre>