Try-Catch

//=====================================

ALTER PROCEDURE dbo.AddSale @employeeid INT,

                @productid  INT,

                @quantity   SMALLINT,

                @saleid UNIQUEIDENTIFIER OUTPUT

AS

SET @saleid = NEWID()

  BEGIN TRY

    BEGIN TRANSACTION

    INSERT INTO Sales.Sales

      SELECT

        @saleid,

        @productid,

        @employeeid,

        @quantity

    COMMIT TRANSACTION

  END TRY

  BEGIN CATCH

    INSERT INTO dbo.DB_Errors

    VALUES

  (SUSER_SNAME(),

   ERROR_NUMBER(),

   ERROR_STATE(),

   ERROR_SEVERITY(),

   ERROR_LINE(),

   ERROR_PROCEDURE(),

   ERROR_MESSAGE(),

   GETDATE());

 

-- Transaction uncommittable

    IF (XACT_STATE()) = -1

      ROLLBACK TRANSACTION

 

-- Transaction committable

    IF (XACT_STATE()) = 1

      COMMIT TRANSACTION

  END CATCH

GO

//==================================

USE AdventureWorks2014

GO

-- Basic example of TRY...CATCH

 

BEGIN TRY

-- Generate a divide-by-zero error  

  SELECT

    1 / 0 AS Error;

END TRY

BEGIN CATCH

  SELECT

    ERROR_NUMBER() AS ErrorNumber,

    ERROR_STATE() AS ErrorState,

    ERROR_SEVERITY() AS ErrorSeverity,

    ERROR_PROCEDURE() AS ErrorProcedure,

    ERROR_LINE() AS ErrorLine,

    ERROR_MESSAGE() AS ErrorMessage;

END CATCH;

GO