Template de un SP con captura de excepciones
CREATE PROCEDURE [dbo].[spa_XXX_ACT_NOMBRE]
AS
/*
!IniHeaderDoc
*****************************************************************************
!NombreObjeto : spa_XXX_ACT_NOMBRE
!Sistema : Proyecto
!Modulo : Web
!Descripcion : Descripción
!Plataforma : !BaseDatosSqlServer
!Perfil : USOGENERAL
!Itinerado : N.A
!Uso : N.A
!Autor : Cesar Gonzalez
!Creacion : DD/MM/YYYY
!Retornos/Salidas : N.A
!OrigenReq : N.A
=============================================================================
!Parametros :
=============================================================================
!Testing : exec spa_XXX_ACT_NOMBRE
=============================================================================
!ControlCambio
--------------
!cVersion !cFecha !cProgramador !cDescripcion
-----------------------------------------------------------------------------
1.0 DD/MM/YYYY Cesar Gonzalez Creación del objeto
*****************************************************************************
!EndHeaderDoc
*/
BEGIN TRANSACTION transaccion_sp
BEGIN
SET NOCOUNT ON;
BEGIN TRY
-- QUERIES
COMMIT TRANSACTION transaccion_sp
RETURN 0
END TRY
BEGIN CATCH
-- En caso de error capturo la información
-- asociada para almacenar y/o desplegar
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @ErrorNumber INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorNumber = ERROR_NUMBER();
ROLLBACK TRANSACTION transaccion_sp
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState);
RETURN (@ErrorNumber)
END CATCH
END