Declaración de lanzamiento de SQL Server

Declaración de lanzamiento de SQL Server

Los errores son inevitables cuando se trata de desarrollos. Por lo tanto, es un buen plan asegurarse de implementar algunas medidas para que los errores no rompan la funcionalidad de su aplicación.

SQL Server nos permite usar la instrucción de lanzamiento para aumentar una excepción. Luego transfirimos el contexto de ejecución a un bloque de intento y captura para manejar el error.

Sintaxis

El siguiente fragmento de código muestra la sintaxis para la declaración de lanzamiento:

Tirar [Error_numer,
mensaje de error,
estado];

Los argumentos en la sintaxis proporcionada incluyen lo siguiente:

  1. Numero erroneo - Este es un valor entero que determina la excepción elevada. El número de error debe estar en el rango de 50000 y 2147483647. Recuerde que los códigos de error por debajo de 50000 están reservados para el motor SQL Server.
  2. Mensaje de error - Esto se refiere a un valor de cadena que actúa como la descripción de la excepción elevada. Debe ser de tipo nvarchar.
  3. estado - El argumento estatal es un valor entero en el rango de 0 a 255, denotando el estado asociado con el error_message.

Nota: Cualquier declaración antes de una cláusula de lanzamiento debe finalizarse con un punto y coma. El servidor SQL también requiere el lanzamiento para incluir los argumentos anteriores. Si la declaración de lanzamiento no tiene los argumentos anteriores, debe estar encerrado dentro de un bloque de try/captación.

La sintaxis es la siguiente:

Empezar a intentar
-- errores potenciales
Fin de prueba
Comenzar a atrapar
-- Haz esto si se produce un error
TIRAR;
Captura final

No puede usar el carácter % en el parámetro ERROR_MESSAGE. Esto se debe a que es un personaje reservado. Si necesita incluir el carácter%en su mensaje de error, asegúrese de escapar de él teniendo el doble porcentaje de caracteres (%%).

Ejemplos de instrucción de lanzamiento de SQL Server

Echemos un vistazo a algunos ejemplos de la declaración de lanzamiento en acción.

SQL Server utilizando la declaración de lanzamiento para lanzar una excepción

El siguiente ejemplo demuestra el uso de la declaración de lanzamiento para plantear una excepción:

Lanzar 50001, '[Fail] - El valor solicitado no se encuentra.', 1;

En este ejemplo, usamos la declaración de lanzamiento para plantear una excepción con el código de error 50001 y el estado de 1.

La salida resultante es la siguiente:

Error de SQL [50001] [S0001]: [Fail] - El valor solicitado no se encuentra.

SQL Server Rethrows Exception utilizando la declaración de lanzamiento

También podemos usar la excepción de lanzamiento a Rethrow la última excepción. Un código de ejemplo es el siguiente:

Tabla de caída si existe t;
Crear tabla t (
ID int no la clave primaria nula,
);
empezar a intentar
insertar en valores t (id) (1);
-- Excepción
insertar en valores t (id) (1);
fin de prueba
comenzar a atrapar
imprimir ('Error atrapado');
tirar;
captura final;

La consulta anterior debe imprimir lo siguiente:

Error atrapado
Error SQL [2627] [23000]: Violación de la restricción de clave primaria 'PK__T__3213E83F35Ad099E'. No se puede insertar la tecla duplicada en el objeto 'dbo.t '. El valor de la clave duplicada es (1).

Usar el formateo de formato para enviar un mensaje personalizado

El siguiente ejemplo muestra cómo usar la función FormatMessage para lanzar una excepción con un mensaje personalizado:

SYS EXEC.Sp_addmessage @msgnum = 50001,
@severity = 20,
@msgtext = 'Un mensaje personalizado que incluye variable: %d',
@lang = 'us_english',
@with_log = falso,
@replace = null;
declarar @msg nvarchar (2048) = formatMessage (50001, 100);
tirar 50001, @msg, 1;

En este caso, la función FormatMessage nos permite agregar los mensajes personalizados, incluidas las variables. Nuevamente, puede verificar los documentos en el servidor SQL SP_ADDMessage () para obtener más información.

El mensaje de error resultante es el siguiente:

Error SQL [50001] [S0001]: un mensaje personalizado que incluye variable: 100

Conclusión

Esta publicación discutió cómo podría usar la cláusula de lanzamiento en el servidor SQL para plantear una excepción.

Gracias por leer!