Saltar al contenido

Usar try catch sql server management studio

El Usar try catch para el manejo de errores de SQL Server nos da control sobre la ejecuscion del código Transact-SQL. Por ejemplo, si cometemos un error, tenemos la oportunidad de hacer algo al respecto y probablemente podamos volver a hacerlo. Lidiar con un error en SQL Server puede ser tan simple como registrar que algo sucedió o intentar corregir el error. Afortunadamente, tenemos la capacidad de traducir y editar estos mensajes para una entrega más significativa a los usuarios, desarrolladores y más.

Índice

    ¿Cómo usar try catch en SQL SERVER?

    El codigo comienza con el texto Begin try, luego se inician digitan las clausulas SQL y cerramos el bloque con el comando End try. Tan pronto como cerremos, debemos abrir el bloque de captura del error, escribiendo las instrucciones de manejo de errores dentro y finalmente cerrar la captura.

    La sintaxis try catch sql

    BEGIN TRY  

         –comandos sql

    END TRY  

    BEGIN CATCH  

         –si ocurre un error

    — ejecuta estas lineas codigo

    END CATCH

    En este momento, podemos intentar corregir el error en la declaración CATCH, informar el error o incluso registrar el error para saber quién lo hizo al iniciar sesión en el nombre de usuario, todo lo cual es útil. Además, tenemos acceso a ciertos datos especiales que solo están disponibles en la declaración CATCH:

    • ERROR_NUMBER – Devuelve el número interno del error
    • ERROR_STATE – Devuelve la información sobre la fuente
    • ERROR_SEVERITY – Devuelve la información sobre cualquier cosa, desde errores informativos hasta errores que el usuario de DBA puede corregir, etc.
    • ERROR_LINE – Devuelve el número de línea en el que ocurrió un error
    • ERROR_PROCEDURE – Devuelve el nombre del procedimiento almacenado o la función
    • ERROR_MESSAGE – Devuelve la información más esencial y ese es el mensaje de texto del error

    Esto es todo lo que necesita SQL Server para manejar los errores. Todo esto se puede hacer con una simple declaración TRY y CATCH, y la única parte donde puede ser difícil es para las transacciones. ¿Por qué? Porque si hay una BEGIN TRANSACTION, siempre debe terminar con una transacción COMMIT o ROLLBACK. El problema es que el error se produce después del inicio, pero antes de que confirmemos o cancelemos. En este caso particular, se utiliza una función especial en la declaración CATCH que nos permite verificar si la transacción está en estado pendiente o no, lo que luego nos permite decidir si revocarla o ejecutarla.

    Ejemplo de 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;

    El resultado seria:

    Debido a las dos declaraciones SELECT, generamos dos cuadrículas de resultados: la primera es 1 dividido por 0, lo que provoca un error, y la segunda es la transferencia de control, que en realidad nos dio algunos resultados. De izquierda a derecha tenemos ErrorNumber, ErrorState, ErrorSeverity, en cuyo caso no hay procedimiento (NULL), ErrorLine y ErrorMessage.

    ¿Try catch o @@error en sql server?

    El uso de @@ERROR como la principal herramienta de detección de errores da como resultado un estilo de código de manejo de errores muy diferente al de las construcciones TRY… CATCH. esto debido a que la misma indica si la transaccion marco un error al momento de realizar un COMMIT TRANSACTION o para de esa forma hacer un ROLLBACK TRANSACTION

    Fuera del bloque CATCH, @@ERROR es la única parte del motor de la base de datos que está disponible para el manejo de errores, el procedimiento almacenado o el activador que causó el error. Todas las demás partes del error, como su gravedad, estado y texto del mensaje se devuelven solo a la aplicación donde los mecanismos de manejo de la API pueden manejarlos.

    En resumen, Try catch permite manejar los errores de transaccion antes realizar un COMMIT TRANSACTION permitiendo tener un control de manejo de errores mas preciso aunque de igualmanera contamos con la variable @@error para ver cual fue el error que se produjo al hacer realizar un COMMIT TRANSACTION .

    Tienes alguna duda dejanos tu comentario!!

    Hasta la proxima!!

    Bye :D!!