martes, 7 de noviembre de 2006

SQL - Devolver errores y advertencias desde un procedimiento almacenado de SQL Server

En diversas situaciones requerimos poder regresar advertencias o errores personalizados desde un procedimiento almacenado, en el presente articulo veremos como lograrlo.
Si se genera un error en SQL donde su gravedad sea igual o menor a 10 solo se lanza una advertencia sin generar una excepción, sin embargo, si la gravedad fue igual o mayor a 11 es lanzada una excepción y es probable que el procedimiento almacenado sea anulado. Es importante contar también con un manejo de transacciones para que se ejecute o no completo nuestro stored.


/* --------------------------------------------------------------------------------
   Autor: Mario Alberto Sanchez Gamboa
   Fecha:
   Descripcion: Procedimiento que lanza un error personalizado.
   Actualizacion:
   -------------------------------------------------------------------------------- */
ALTER PROCEDURE spTemporal
   @param1 BIT
AS
BEGIN

   IF @param1 = 1
   BEGIN
      RETURN 0
   END
   ELSE
   BEGIN
      RAISERROR ('Error personalizado al momento de ejecutar el procedimiento.', 11, 1)
      RETURN -1
   END

END

Si ejecutamos el stored anterior con un valor de diferente a 1 será lanzado el error personalizado.

EXEC spTemporal 0

Resultado:
Server: Msg 50000, Level 11, State 1, Procedure spTemporal, Line 18
Error personalizado al momento de ejecutar el procedimiento.