Control de errores
El bloque TRY-CATCH en Transact-SQL permite manejar errores que puedan ocurrir en un bloque de código.
En el bloque TRY se escribe el código que puede generar errores. Si ocurre un error, el control pasa al bloque CATCH, donde se define cómo manejarlo (mostrar mensajes, registrar el error, etc.).
Esta estructura ayuda a que el código sea más seguro y predecible, permitiendo a los desarrolladores gestionar los errores de forma efectiva.
🧩 Estructura básica
Section titled “🧩 Estructura básica”BEGIN TRY -- Código que puede generar erroresEND TRYBEGIN CATCH -- Código para manejar el errorEND CATCH💡 Ejemplo básico
Section titled “💡 Ejemplo básico”BEGIN TRY DECLARE @divisor int, @dividendo int, @resultado int
SET @dividendo = 100 SET @divisor = 0
-- Provoca error de división por cero SET @resultado = @dividendo / @divisor PRINT 'No hay error'END TRYBEGIN CATCH PRINT 'Se ha producido un error'END CATCHResultado:
Se ha producido un error📝 Funciones de error
Section titled “📝 Funciones de error”| Función | Descripción |
|---|---|
| ERROR_NUMBER() | Devuelve el número de error. |
| ERROR_SEVERITY() | Devuelve la severidad del error. |
| ERROR_STATE() | Devuelve el estado del error. |
| ERROR_PROCEDURE() | Devuelve el nombre del procedimiento almacenado que ha provocado el error. |
| ERROR_LINE() | Devuelve el número de línea en el que se ha producido el error. |
| ERROR_MESSAGE() | Devuelve el mensaje de error. |
💡 Ejemplo con funciones de error
Section titled “💡 Ejemplo con funciones de error”BEGIN TRY DECLARE @divisor int, @dividendo int, @resultado int
SET @dividendo = 100 SET @divisor = 0
-- Provoca error de división por cero SET @resultado = @dividendo / @divisor PRINT 'No hay error'END TRYBEGIN CATCH PRINT ERROR_NUMBER() PRINT ERROR_SEVERITY() PRINT ERROR_STATE() PRINT ERROR_PROCEDURE() PRINT ERROR_LINE() PRINT ERROR_MESSAGE()END CATCHResultado:
8134 -- ERROR_NUMBER16 -- ERROR_SEVERITY1 -- ERROR_STATE -- ERROR_PROCEDURE17 -- ERROR_LINEError de división entre cero. -- ERROR_MESSAGE🚨 RAISERROR
Section titled “🚨 RAISERROR”La función RAISERROR permite generar mensajes de error personalizados y lanzar errores específicos.
Es útil para validar entradas y mostrar mensajes descriptivos al usuario.
Sintaxis:
RAISERROR ('Mensaje de error', Severidad, Estado)Ejemplo:
DECLARE @tipo int, @clasificacion int
SET @tipo = 1SET @clasificacion = 3
IF (@tipo = 1 AND @clasificacion = 3)BEGIN RAISERROR ( 'El tipo no puede valer uno y la clasificación 3', -- Mensaje de error 16, -- Severidad 1 -- Estado )END- Severidad: Indica el grado de criticidad del error (0 a 25). Solo puedes asignar valores de 0 a 18. Los errores de 20 a 25 son fatales y cierran la conexión.
- Estado: Valor entre 1 y 127 para