Sunteți pe pagina 1din 16

CONTENIDO

Control de errores en TRANSACT-SQL

TRATAMIENTO DE ERORES
SQL Server proporciona el control de errores a travs 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

TRATAMIENTO DE ERORES
BEGIN TRY DECLARE @DIVISOR @RESULTADO INT SET @DIVIDENDO = 100 SET @DIVISOR = 0 INT, @DIVIDENDO INT,

-- 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;

TRATAMIENTO DE ERORES
Funciones especiales de Error

Las funciones especiales de error, estn disponibles nicamente en el bloque CATCH para la obtencin de informacin detallada del error. A continuacin, presentamos las funciones que se utilizan en el control de errores.

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 nmero de lnea en la que se ha producido el error. ERROR_MESSAGE(): Devuelve el mensaje de error

TRATAMIENTO DE ERORES
Errores no afectados por una construccin TRYCATCH
Las construcciones TRYCATCH no detectan lo siguiente: o Advertencias o mensajes informativos que tienen una gravedad 10 o inferior. 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 sesin. Si se produce un error con una gravedad 20 o superior y no se interrumpe la conexin con la base de datos, TRYCATCH controlar el error.

TRATAMIENTO DE ERORES
Errores no afectados por una construccin TRYCATCH Las construcciones TRYCATCH no detectan lo siguiente: o Atenciones, como solicitudes de interrupcin de clientes o conexiones de cliente interrumpidas. o Cuando el administrador del sistema finaliza la sesin mediante la instruccin KILL.

TRATAMIENTO DE ERORES
Errores no afectados por una construccin TRYCATCH

Un bloque CATCH no controla los siguientes tipos de errores cuando se producen en el mismo nivel de ejecucin que la construccin TRYCATCH: Errores de compilacin, como errores de sintaxis, que impiden la ejecucin de un lote. Errores que se producen durante la recompilacin de instrucciones, como errores de resolucin de nombres de objeto que se producen despus de la compilacin debido a una resolucin de nombres diferida.

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

TRATAMIENTO DE ERORES
Variable de sistema @@ERROR
La variable @@ERROR devuelve un nmero de error que representa el error de la operacin. Si el error se encuentra en la vista de catlogo sys.sysmessages, entonces @@ERROR, contendr el valor de la columna sys.sysmessages.error para dicho error. Puede ver el texto asociado con el nmero de error @@ERROR en sys.sysmessages.description

TRATAMIENTO DE ERORES
Generar un error RAISERROR
En ocasiones, es necesario provocar voluntariamente un error, por ejemplo nos puede interesar que se genere un error cuando los datos incumplen una regla de negocio. Podemos provocar un error en tiempo de ejecucin a travs de la funcin RAISERROR. La funcin RAISERROR recibe tres parmetros, el mensaje del error (o cdigo de error predefinido), la severidad y el estado.

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

PROBLEMAS PROPUESTOS

FIN DE LA SESIN

S-ar putea să vă placă și