febrero 24, 2011

Manejo de excepciones en SQL Server

Dos formas de manejar los errores con SQL Server, sólo que con el uso de Try-Catch únicamente se puede implementar en versiones 2005 o superior y con el uso de GOTO desde la 2000.

Ambas formas funcionan, pero es más practica y segura (por si se omite validar alguna instruccion que provoque excepción) la que protege todo el bloque que es propenso a excepción.


---- Uso clásico con uso de marcadores y GOTO

Declare @Msj nvarchar(200)
--Comienza la transacción
BEGIN TRANSACTION

    --UPDATE 1
    --DELETE 1
    --Insert 1
    --para simular error
    Select 1/0
    --Verificar si hubo errores
    IF @@Error != 0
       GOTO ERROR_HANDLER

   

--Finalizar la Transacción
COMMIT TRANSACTION
print 'OK fin transacción'
SET NOCOUNT OFF
RETURN

--Manejador de Error.
ERROR_HANDLER:
ROLLBACK TRANSACTION
--Imprimir msj de error
set @Msj = 'Tenemos el error # ' + CONVERT(VARCHAR(10), Error_number()) + ' ' +
          Error_message() + ' en la linea: ' + convert(varchar(10), ERROR_LINE())
RAISERROR 13000 @Msj
RETURN


-----Uso con Try-Catch de SQL Server 2005 o superior
Declare @Msj nvarchar(200)
--Comienza la transacción
BEGIN TRANSACTION
BEGIN Try
    --UPDATE 1
    --DELETE 1
    --Insert 1
    --para simular error
    Select 1/0
COMMIT TRANSACTION
END Try

BEGIN Catch

    
    ROLLBACK TRANSACTION
    --Imprimir msj de error
       set @Msj = 'Tenemos el error # ' + CONVERT(VARCHAR(10), Error_number()) + ' ' +
           Error_message() + ' en la linea: ' + convert(varchar(10), ERROR_LINE())
      
       --PRINT @Msj
    Raiserror 13000  @Msj    

END Catch

No hay comentarios.: