CONTENIDO  Control de errores en TRANSACT-SQL .

.TRATAMIENTO DE ERORES SQL Server proporciona el control de errores a través de las instrucciones TRY y CATCH. Estas nuevas instrucciones suponen un gran paso adelante en el control de errores en SQL Server.

TRATAMIENTO DE ERORES Begin try Expresion_sql End try Begin catch Expresion_sql End catch .

ESTA LINEA PROVOCA UN ERROR DE DIVISION POR 0 SET @RESULTADO = @DIVIDENDO/@DIVISOR PRINT 'NO HAY ERROR' END TRY BEGIN CATCH PRINT 'SE HA PRODUCIDO UN ERROR' END CATCH. @DIVIDENDO INT. -. .TRATAMIENTO DE ERORES BEGIN TRY DECLARE @DIVISOR @RESULTADO INT SET @DIVIDENDO = 100 SET @DIVISOR = 0 INT.

TRATAMIENTO DE ERORES Funciones especiales de Error Las funciones especiales de error. . presentamos las funciones que se utilizan en el control de errores. están disponibles únicamente en el bloque CATCH para la obtención de información detallada del error. A continuación.

 ERROR_MESSAGE(): Devuelve el mensaje de error .TRATAMIENTO DE ERORES Funciones especiales de Error  ERROR_NUMBER(): Devuelve el numero 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 la que se ha producido el error.

o Errores que tienen la gravedad 20 o superior que detienen el procesamiento de las tareas de Motor de base de datos de SQL Server en la sesión.TRATAMIENTO DE ERORES Errores no afectados por una construcción TRY…CATCH Las construcciones TRY…CATCH no detectan lo siguiente: o Advertencias o mensajes informativos que tienen una gravedad 10 o inferior. Si se produce un error con una gravedad 20 o superior y no se interrumpe la conexión con la base de datos. . TRY…CATCH controlará el error.

. o Cuando el administrador del sistema finaliza la sesión mediante la instrucción KILL.TRATAMIENTO DE ERORES Errores no afectados por una construcción TRY…CATCH Las construcciones TRY…CATCH no detectan lo siguiente: o Atenciones. como solicitudes de interrupción de clientes o conexiones de cliente interrumpidas.

. como errores de sintaxis. que impiden la ejecución de un lote. • Errores que se producen durante la recompilación de instrucciones. como errores de resolución de nombres de objeto que se producen después de la compilación debido a una resolución de nombres diferida.TRATAMIENTO DE ERORES Errores no afectados por una construcción TRY…CATCH Un bloque CATCH no controla los siguientes tipos de errores cuando se producen en el mismo nivel de ejecución que la construcción TRY…CATCH: • Errores de compilación.

‘ END . la TRANSACT-SQL anterior no encontró errores.TRATAMIENTO DE ERORES Variable de sistema @@ERROR Devuelve el número de error de la última instrucción TRANSACT-SQL ejecutada. si la variable devuelve 0. DELETE FROM TB_Proveedor WHERE Codigo_Proveedor = 100 IF @@ERROR<>0 BEGIN PRINT 'No se puede eliminar el Proveedor indicado.

TRATAMIENTO DE ERORES Variable de sistema @@ERROR La variable @@ERROR devuelve un número de error que representa el error de la operación. Puede ver el texto asociado con el número de error @@ERROR en sys. Si el error se encuentra en la vista de catálogo sys. entonces @@ERROR. contendrá el valor de la columna sys.error para dicho error.description .sysmessages.sysmessages.sysmessages.

TRATAMIENTO DE ERORES Generar un error RAISERROR En ocasiones. . Podemos provocar un error en tiempo de ejecución a través de la función RAISERROR. por ejemplo nos puede interesar que se genere un error cuando los datos incumplen una regla de negocio. es necesario provocar voluntariamente un error. la severidad y el estado. el mensaje del error (o código de error predefinido). La función RAISERROR recibe tres parámetros.

. Admite valores de 0 al 25. Para asignar valores del 19 al 25. y cerraran la conexión que ejecuta el comando RAISERROR. pero solo podemos asignar valores del 0 al 18. necesitaremos ser miembros de la función de SQL Server sysadmin.TRATAMIENTO DE ERORES Generar un error RAISERROR La severidad indica el grado de criticidad del error. Los errores el 20 al 25 son considerados fatales por el sistema.

PROBLEMAS PROPUESTOS .

FIN DE LA SESIÓN .