InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial de Transact SQL
Introducción a Transact SQL
Programación con Transact SQL
Fundamentos de Transact SQL
Tipos de datos en Transact SQL
Variables en Transact SQL
Equivalencia de datos de SQL Server y .NET
Operadores en Transact SQL
Estructuras de control en Transact SQL
Control de errores en Transact SQL
Consultar datos en Transact SQL
Consultas agregadas
Select FOR XML
Operaciones con conjuntos.
Insertar datos en Transact SQL
Actualizar datos en Transact SQL
Borrar datos en Transact SQL
Transacciones en Transact SQL
Procedimientos almacenados en Transact SQL
Funciones en Transact SQL
Funciones integradas de Transact SQL (I)
Triggers en Transact SQL
Cursores en Transact SQL
SQL dinámico en Transact SQL
También puedes ver ...
Simular TRUNC en SQL Server
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
SET IDENTITY_INSERT ON y LinqToSQL
SQL Server 2008
LinQ To SQL - Un ejemplo sencillo
Formatear números en SQL Server
Leer un campo XML de SQL Server 2005 con C#
SQL dinámico en Transact SQL
Cursores en Transact SQL
Triggers en Transact SQL


Control de errores en Transact SQL

Uso de TRY CATCH

     A partIr de la versión 2005, SQL Server proporciona el control de errores a través de las instrucciónes TRY y CATCH.

    Estas nuevas instrucciones suponen un gran paso adelante en el control de errores en SQL Server, un tanto precario en las versiones anteriores.

    La sintaxis de TRY CATCH es la siguiente:

    
    BEGIN TRY
        ...
    END TRY
    BEGIN CATCH
        ...
    END CATCH

    El siguiente ejemplo ilustra el uso de TRY - CATCH.


 BEGIN TRY

   DECLARE @divisor int ,

   @dividendo int,

   @resultado int


   SET @dividendo = 100

   SET @divisor = 0

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

Funciones especiales de Error

    Las funciones especiales de error,están disponibles únicamente en el bloque CATCH para la obtención de información detallada del error.

    Son:

  • ERROR_NUMBER(), devuelve el número 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 el que se ha producido el error.
  • ERROR_MESSAGE(), devuelve el mensaje de error.

    Son extremadamente útiles para realizar una auditoría de errores.


 BEGIN TRY

   DECLARE @divisor int ,

   @dividendo int,

   @resultado int


   SET @dividendo = 100

   SET @divisor = 0

   -- Esta linea provoca un error de division por 0
   SET @resultado = @dividendo/@divisor
   PRINT 'No hay error'
 END TRY
 BEGIN CATCH
   PRINT ERROR_NUMBER()
     PRINT ERROR_SEVERITY()   
     PRINT ERROR_STATE() 
     PRINT ERROR_PROCEDURE()  
     PRINT ERROR_LINE()  
     PRINT ERROR_MESSAGE() 
 END CATCH

    Lógicamente, podemos utilizar estas funciones para almacenar esta información en una tabla de la base de datos y registrar todos los errores que se produzcan.

La variable de sistema @@ERROR

    En versiones anteriores a SQL Server 2005, no estaban disponibles las instrucciones TRY CATCH. En estas versiones se controlaban los errores utilizando la variable global de sistema @@ERROR, que almacena el número de error producido por la última sentencia Transact SQL ejecutada.


 DECLARE @divisor int ,
   @dividendo int ,
    @resultado int

 SET @dividendo = 100
 SET @divisor = 0
 -- Esta linea provoca un error de division por 0
 SET @resultado = @dividendo/@divisor
 
 IF @@ERROR = 0
     BEGIN
         PRINT 'No hay error'
     END
 ELSE
     BEGIN        
      PRINT 'Hay error'  
  END

    El uso de @@ERROR para controlar errores puede provocar multitud de problemas. Uno de los más habituales es sin duda, incluir una nueva sentencia Transact SQL entre la línea que provoco el error y la que lo controla. Esa nueva instrucción restaura el valor de @@ERROR y no controlaremos el error.

    El siguiente ejemplo ilustra esta situación:


 DECLARE @divisor int ,
   @dividendo int ,
    @resultado int

 SET @dividendo = 100
 SET @divisor = 0
 -- Esta linea provoca un error de division por 0
 SET @resultado = @dividendo/@divisor
 PRINT 'Controlando el error ...' -- Esta linea estable @@ERROR a cero
 IF @@ERROR = 0
     BEGIN
-- Se ejecuta esta parte!
         PRINT 'No hay error'
     END
 ELSE
     BEGIN        
      PRINT 'Hay error'  
  END

Generar un error con RAISERROR

    En ocasiones es necesario provocar voluntariamente un error, por ejemplo nos puede interesas que se genere un error cuando los datos incumplen una regla de negocio.

    Podemos provocar un error en tiempo de ejecución a través de la función RAISERROR.


 DECLARE @tipo int,
         @clasificacion int
 
 SET @tipo = 1
 SET @clasificacion = 3
 IF (@tipo = 1 AND @clasificacion = 3)
 BEGIN
    RAISERROR ('El tipo no puede valer uno y la clasificacion 3',
16, -- Severidad
1 -- Estado
)
 END

    La función RAISERROR recibe tres parámetros, el mensaje del error (o código de error predefinido), la severidad y el estado.

    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 conexion que ejecuta el comando RAISERROR. Para asignar valores del 19 al 25 necesitares ser miembros de la función de SQL Server sysadmin.

    El estado es un valor para permitir que el programador identifique el mismo error desde diferentes partes del código. Admite valores entre 1 y 127, permite tratar .

 


Inicio | Tutorial de Transact SQL Estructuras de control en Transact SQLTutorial de Transact SQLConsultar datos en Transact SQL Versión para imprimir Foros de consulta

 
Excelente por Vinicio Valencia
Respuesta recibida el [29/01/2008 04:36:45]
Excelente explicación del uso del control de errores en SQL, bastante explicativo

 
Avanzado por Joel Colindres
Respuesta recibida el [31/01/2008 07:03:31]
para controlar errores de alta seridad como perdidas de conexion en consultas remotas hay que manipular la bandera SET XACT_ABORT 

 
muy malo por nemon, experto en bases de datos
Respuesta recibida el [03/11/2008 11:07:20]
Faltan detalles y plantillas con experimentos mas complejos.

 
Buen aporte por Luis Fabres
Respuesta recibida el [31/12/2008 08:44:20]
Buen aporte para los que nos estamos iniciando. .... obviamente no para los gurus expertos master idolos... como el "sr nemon"

 
Excelente aporte, muy bien exp... por _FeLiPe_PooL_
Respuesta recibida el [16/01/2009 11:42:37]
Excelente aporte, muy bien explicado y con ejemplos claros

 
Buen porte| por Roberto
Respuesta recibida el [21/05/2009 03:31:05]
Es claro concreto y eficiente gracias sigue asi

 
Bueno por Mila
Respuesta recibida el [26/05/2009 09:47:12]
Es muy bueno el aporte, para todos los que estamos aprendiendo. 

 
Llamado de funciones asp.NET por Karry
Respuesta recibida el [23/06/2009 10:52:06]
Hola quisiera que alguien me diga como se llaman este tipo de funciones de error desde una aplicacion en asp.NET

Gracias....

 
Gracias por JL
Respuesta recibida el [24/06/2009 09:46:47]
Gracias por tu esfuerzo de compartir algunos de tus conocimientos, en lo personal solo diria que al tutorial de T-SQL le falta una seccion de funciones de manejo de cadenas como UPPER, LOWER, LTRIM, RTRIM, etc. Por lo demas esta muy completo. Gracias!

 
Gracias por Sergio
Respuesta recibida el [18/01/2010 10:06:57]
Gracias por el esfuerzo, un tutorial breve y bien explicado, directo al grano.


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial de Transact SQL Estructuras de control en Transact SQLTutorial de Transact SQLConsultar datos en Transact SQL Versión para imprimir

Control de errores en Transact SQL
Autor: Pedro Herrarte Sánchez
Visitas: 32685 Fecha de publicación: 15/06/2007
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 106 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 806 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 762 | Comentarios: 3 | Archivo: Articulos
Visitas: 3174 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14553 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1492 | Comentarios: 3 | Archivo: Articulos
Visitas: 695 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2034 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
devolver consulta en form builder de oracle con like por cesar10lb ... [ORACLE] 0 13/03/2010
certificado por jhon jairo vargas ... [Actualidad] 0 13/03/2010
certificado de cesantias horizonte por yeimmy ... [Actualidad] 4 13/03/2010
solicito certificado de pensiones y sesantias para laborar por maria eugenia garcia m. ... [Actualidad] 0 13/03/2010
certificado de fondos de pensiones horizonte por mona ... [Actualidad] 6 03/03/2010
certificado pensiones por nelly moreno ... [Actualidad] 0 13/03/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 125 12/01/2010
cerificado fondo horizonte de pensiones y cesantias por carlos fideligno torres herrera ... [Actualidad] 147 18/01/2010
certuficado de afiliacion a porvenir por ede ... [Actualidad] 6 05/02/2010
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 136 26/01/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 59 10/02/2010
necesito certificado de afiliacíon a pensiones por jelo ... [Actualidad] 0 12/03/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
30/12/2007 Novedades en C# 3.0 - Primeros pasos con LINQ
09/05/2006 Como leer XML con C#
08/03/2007 Cambiar el nombre del servidor SQL Server
09/10/2006 Variables y tipos de datos    forma parte de...Tutorial C#
04/03/2006 Bloques PL/SQL    forma parte de...Tutorial PL/SQL
21/07/2007 Insertar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
02/01/2007 Mejoras en la manipulación de delegados    forma parte de...Tutorial C#
31/03/2006 Operadores en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]