martes, 24 de septiembre de 2013

INVESTIGACION: Bloque Try / Catch SQL Server

Los errores de código en el SQL Server pueden tratarse de forma similar a lenguajes como C# o C++. Constan del bloque try y del bloque catch, donde el bloque catch controla la excepción que se puede producir en el bloque try. Deben de ir primero el bloque try, seguido inmediatamente del bloque catch.

El SQL Server presenta varios tipos de errores, que los mostramos a continuacin:
  • ERROR_NUMBER() devuelve el número de error.
  • ERROR_MESSAGE() devuelve el texto completo del mensaje de error. El texto incluye los valores suministrados para los parámetros sustituibles, como longitudes, nombres de objeto u horas.
  • ERROR_SEVERITY() devuelve la gravedad del error.
  • ERROR_STATE() devuelve el número de estado del error.
  • ERROR_LINE() devuelve el número de línea dentro de la rutina en que se produjo el error.
  • ERROR_PROCEDURE() devuelve el nombre del procedimiento almacenado o desencadenador en que se produjo el error.

    Algo que cabe mencionar son las dos situaciones donde el bloque try/catch no los puede controlar como lo son:
    - Errores de Compilación
    - Errores que se producen durante la recompilación de instrucciones

    Instrucción rollback : Revierte una transacción explícita o implícita hasta el inicio de la transacción o hasta un punto de retorno dentro de la transacción y de igual manera libera los recursos que mantiene la transacción. 

    Instrucción commit: Hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los recursos mantenidos por la transacción

    En el siguiente ejemplo se muestra el machote que seguimos en cada uno de nuestros procedimientos, para hacer uso de un manejo efectivo de errores y excepciones.

    create procedure insertarHistoricoDocumento
    @Documento int,
    @Administrador int,
    @Descripcion varchar (50),
    @Contenido text
    as
    begin
    begin try
    begin transaction
    insert                               HistoricoModDocumento(FKDocumento,FKAdministrador,DescripcionCambio,Contenido)
    values(@Documento,@Administrador,@Descripcion,@Contenido)
    commit transaction
    end try
    begin catch
    select ERROR_NUMBER() as ErrorNumber;
    return -1;
    rollback transaction
    end catch
    end


    Para mas información se puede consultar los siguientes enlaces :
    http://technet.microsoft.com/es-es/library/ms179296(v=sql.105).aspx
    http://technet.microsoft.com/es-es/library/ms181299.aspx

    Cristian Araya
    David Vargas

    Horas Invertidas: 2 horas

No hay comentarios:

Publicar un comentario