El manejo de los errores en el SQL Server nos da un control sobre el código Transact-SQL. Por ejemplo, cuando las cosas van mal, nosotros tenemos la oportunidad de hacer algo al respecto y probablemente poder hacerlo de nuevo. El manejo de errores de SQL Server puede ser tan fácil como simplemente registrar que algo sucedió o podríamos ser nosotros intentando poder corregir un error. Incluso se puede estar traduciendo el error al lenguaje SQL, ya que todos nosotros sabemos cómo los mensajes de error técnicos de SQL Server podrían no tener sentido y ser difíciles de entender. En este artículo, nosotros vamos a analizar más de cerca la instrucción TRY…CATCH, la sintaxis, su aspecto, su funcionamiento y lo que se puede hacer cuando se produce un error. A parte de eso, el método se explicará en un caso de SQL Server utilizando un grupo de sentencias / bloques T-SQL, que es simplemente la forma en que SQL Server maneja los errores. Vayamos a SQL Server Management Studio (SSMS) y empecemos con los conceptos básicos de cómo manejar los errores de SQL Server. La base de datos de ejemplo AdventureWorks 2014 se usará a través del artículo.
La Instrucción TRY...CATCH
La base del manejo de errores en SQL Server se encuentra en la instrucción TRY...CATCH. Así es como se ve la sintaxis. Es muy simple aprender a usarla. Cualquier cosa entre BEGIN TRY y END TRY es el código que queremos monitorear para detectar un error. Ya mismo, dentro de la declaración CATCH, nosotros podemos tratar de corregir el error, informar el error o incluso poder registrar el error para saber cuándo ocurrió, quién lo hizo al registrar el nombre de usuario, todo lo que es útil. Eso es todo lo que se requiere cuando se trata acerca del manejo de errores de SQL Server. Todo se puede realizar con una simple instrucción TRY y CATCH.
Aplicación Práctica del Manejo de Errores
Primeros Pasos con SSMS y AdventureWorks
Es un ejemplo de cómo se ve y cómo puede funcionar. Lo que estamos haciendo en BEGIN TRY es dividir 1 por 0, lo que, por supuesto, puede causar un error. Por lo tanto, tan pronto como ese bloque de código sea alcanzado, transferirá el control al bloque CATCH y luego seleccionará todas las propiedades utilizando las funciones integradas que vimos anteriormente. Generamos dos cuadrículas de resultados debido a dos instrucciones SELECT: la primera es 1 dividida por 0, lo que causa el error y la segunda es el control transferido que realmente nos dio algunos resultados.
Registro y Seguimiento de Errores
Ahora, realicemos algo un poco más significativo. Es una buena idea poder hacer un seguimiento de estos errores. Las cosas que son propensas a errores deben ser capturadas de todos modos y al menos registradas. La modificación de este procedimiento almacenado simplemente envuelve el manejo de errores en este caso alrededor de la única declaración dentro del procedimiento almacenado. Ahora, lo que podemos hacer aquí es mirar la tabla de errores y ver qué sucedió. Por ejemplo, podemos encontrar un error como: "Violación de la restricción PRIMARY KEY ‘PK_Sales_1’. No se puede insertar una clave duplicada en el objeto ‘Ventas. Ventas’." Este fue un ejemplo muy artificial, pero el punto es que, en el mundo real, poner una fecha inválida es muy común. Por ejemplo, pasar una ID de empleado que no existe en un caso cuando tenemos una clave externa configurada entre la tabla de Ventas y la tabla de Empleados, lo que quiere decir es que el Empleado debe existir para crear un nuevo registro en la tabla de Ventas. La idea general detrás de esto es no hacer desaparecer el error. Al menos queremos informar a una persona que algo salió mal y luego también registrarlo. En el mundo real, si hubiera una aplicación que se basara en un procedimiento almacenado, los desarrolladores probablemente tendrían el manejo del error de SQL Server codificado en algún lugar, también porque podría saber cuándo ocurrió un error. Aquí también es donde sería una buena idea devolver un error al usuario/aplicación. Por ejemplo, si nosotros sabemos que es más probable que ocurra una identificación de empleado que no existe, entonces podemos hacer una búsqueda. Esta búsqueda puede verificar si el ID de empleado existe y si no, esta arroja el error exacto de que ocurrió.
Manejo de Transacciones con TRY...CATCH
La única parte cuando puede tornar difícil es cuando estamos lidiando con transacciones. ¿Por qué? Es que, si hay un COMIENZO DE TRANSACCIÓN, siempre debe terminar con una transacción COMPROMISO o ROLLBACK. El problema es si se genera un error después de que comencemos, pero antes de confirmar o revertir. Nosotros solo mencionamos de forma breve la parte delicada de las transacciones, así que aquí hay un ejemplo simple de cómo tratarlas. Entonces, si todo esto se ejecuta correctamente dentro de la transacción Begin, podrá insertar un registro en Ventas y luego lo confirmará. Si el error no es grave y está en un estado comprometible, todavía nosotros podemos realizar la transacción. Pero si algo salió mal y está en un estado no comprometible, entonces podemos revertir la transacción.
Lea también: historia del pueblo judío tras el Holocausto
Mensajes de Error Personalizados
Para finalizar, veamos cómo podríamos crear nuestros propios mensajes personalizados de error. Esto es muy bueno cuando sabemos que existe una posible situación que podría ocurrir. Como mencionamos anteriormente, es factible que alguien pase una identificación de empleado no válida. En este caso particular, podemos hacer una verificación antes de esa fecha y, por supuesto, cuando esto suceda, podemos generar nuestro propio mensaje personalizado, ya que la identificación del empleado que no existe. Si este recuento vuelve a cero, eso quiere decir que el empleado con esa identificación no existe. Luego podemos llamar a RAISERROR donde definimos un mensaje definido por el usuario y, además, nuestra gravedad y estado personalizados. Con estos últimos cambios en nuestro procedimiento de tienda, también hay otro RAISERROR en el bloque de captura. Si se generó otro error, en lugar de que se pierda, podemos volver a usar al RAISERROR y devolver exactamente lo que sucedió. Es por eso que hemos declarado todas las variables y los resultados de todas las funciones. Adicionalmente, otra cosa que vale la pena mencionar es que podemos predefinir este código de mensaje de error, la gravedad y el estado. Existe un procedimiento almacenado llamado sp_addmessage que se utiliza para añadir nuestros propios mensajes de error. Esto es bastante útil cuando necesitamos realizar el mensaje en múltiples lugares, solo podemos utilizar RAISERROR y pasar el número del mensaje en lugar de que tengamos que volver a escribir las cosas de nuevo. El mensaje sp_dropmessage se usa, por lo general, para quitar un mensaje de error definido por el usuario específico.
Lea también: importancia del VPN en las decisiones financieras
Lea también: la instauración del régimen de Iturbide
tags: #comienzo #de #declaracion #inesperadosql #error #SQL
