Volver a: SQL Server Tutorial Para Principiantes y Profesionales
Cómo Criar A los Errores de forma Explícita en SQL Server
En este artículo, Voy a hablar de cómo criar a los errores de forma explícita en SQL Server con algunos ejemplos, junto con los también vamos a discutir las diferentes opciones que podemos utilizar con Raiserror en SQL Server., Lea nuestro artículo anterior donde discutimos el ejemplo en tiempo real de la función del sistema de error de elevación. Como parte de este artículo, vamos a discutir los siguientes indicadores.
- ¿Cómo generar errores explícitamente en SQL Server?
- error de elevación usando la instrucción RAISERROR en SQL Server
- error de elevación usando la instrucción throw en SQL Server
- ¿Cuál es la diferencia entre la función RAISERROR y la instrucción throw?
- entendiendo la instrucción RaiseError con la opción Log.
- Cómo generar errores almacenando el mensaje de Error en la tabla SysMessage.,
¿cómo generar errores explícitamente en SQL Server?
en general, los errores se producen en un programa por razones predefinidas como dividir un número por cero, violación de la clave primaria, violación de verificación, violación de la integridad referencial, etc. Pero si queremos entonces también podemos plantear un error en sus programas de dos maneras diferentes.,
- sentencia Raiserror
- sentencia throw (nueva característica de SQL Server 2012)
sintaxis Raiserror: Raiserror (errorid/errormsg, severidad, estado)
throw sintaxis: throw ErrorId, errormsg, State
ejemplo: elevar error usando la sentencia RAISERROR en SQL Server.
en el siguiente procedimiento almacenado, generamos un error cuando la división es 1 utilizando la instrucción RAISERROR.,
Ejemplo de ejecución: EXEC spDivideBy1 10, 1
Ejemplo: Elevar Error en la utilización de tiro de instrucción en SQL Server.
el procedimiento anterior también se puede reescribir con la ayuda de una instrucción throw en lugar de Raiserror de la siguiente manera.,
EJECUCIÓN: EXEC spDivideBy2 10, 1
¿Cuál es la diferencia entre la función RAISERROR y tiro de instrucción?
si usamos cualquiera de las dos instrucciones en un programa para generar un error sin bloques try and catch, la instrucción RAISERROR después de generar el error continuará la ejecución del programa, mientras que la instrucción throw terminará el programa de forma anormal en esa línea., Pero si se usan bajo try block, ambos se comportarán de la misma manera que saltarán directamente al bloque catch desde donde se planteó el error.
la instrucción RAISERROR dará una opción de especificar la gravedad del mensaje de error, mientras que no tenemos esta opción en el caso de la instrucción throw donde todos los mensajes de error tendrán una gravedad predeterminada de 16.,
en caso de RAISERROR, existe la posibilidad de grabar el mensaje de error en el archivo de registro del servidor utilizando la opción with log, mientras que no podemos hacer esto en caso de una sentencia throw.
en caso de throw, necesitamos especificar tanto el errorid como el mensaje de error para elevar el error, mientras que en caso de RAISERROR podemos especificar id o message., Si el id no está especificado, el ID de error predeterminado es 50000, pero si queremos especificar solo el ID de error primero debemos agregar el mensaje de error en la tabla sysmessage especificando un id único en la tabla.
OPTIONS WITH RAISERROR STATEMENT:
With Log: al usar esta opción en la declaración RAISERROR podemos grabar el mensaje de error en el archivo de registro de SQL Server para que si los errores son fatales el administrador de la base de datos pueda encargarse de corregir esos errores.,
si la gravedad del error es mayor que 20 es obligatorio especificar la opción With Log. Para probar esto, altere el procedimiento spDivideBy1 cambiando la instrucción raiserror de la siguiente manera
RAISERROR (‘DIVISOR CANNOT BE ONE’, 16, 1) con LOG
a continuación se muestra el procedimiento completo
Ahora ejecute el procedimiento y cuando el error dado plantea que podemos ver los mensajes de error registrados en el archivo de registro de SQL Server. Para ver el archivo de registro., En el Explorador de objetos, vaya al nodo de registro de SQL Server del nodo de administración y abra el archivo de registro actual haciendo doble clic en él como se muestra a continuación.,g
RAISERROR (‘el número %d no se puede dividir por %d’,16, 1, @no1, @no2)con LOG
generar errores almacenando el mensaje de error en la tabla sysmessage:
podemos generar un error sin dar el mensaje de error en la instrucción RAISERROR pero en lugar del mensaje de error necesitamos especificar el id de error y para especificar el ID de error necesitamos registrar ese ID de error con el mensaje de error en la tabla SYSMESSAGE utilizando el procedimiento definido por el sistema «sp_addmessage»., 16, ‘DIVIDE por un ERROR encontrado’
ahora altere el procedimiento cambiando la instrucción RAISERROR de la siguiente manera
RAISERROR (51000,16, 1)con LOG
eliminando los mensajes de error de la tabla sysmessages:
sintaxis: sp_dropmessage <Error ID>
ejemplo: Exec sp_dropmessage 51000
en el siguiente artículo, voy a discutir la implementación try-catch en SQL Server para manejar el error en SQL Server., Aquí, en este artículo, trato de explicar cómo generar errores explícitamente en SQL Server paso a paso con algunos ejemplos.