Inicio > Curso básico de SQL Server 2008, Transact-SQL > Control de errores y transacciones – Sql Server 2008

Control de errores y transacciones – Sql Server 2008


— Creamos una base de datos para realizar el ejemplo y la llamamos Pruebas
USE Pruebas
GO

— Creamos una tabla alumnos la cual utilizaremos de ejemplo

IF OBJECT_ID(‘ALUMNOS’) IS NOT NULL
   DROP TABLE ALUMNOS
GO

CREATE TABLE ALUMNOS (ID INT PRIMARY KEY, NOMBRE VARCHAR(30),
                       FECHA DATETIME,EDAD INT
                       CHECK (EDAD >=11 AND EDAD <=18))
GO

— Ingresamos registros

INSERT INTO ALUMNOS VALUES (1,’MARIO’,’20100101′,11)

— Intentaremos ingresar un registro que no cumple con el check

INSERT INTO ALUMNOS VALUES (2,’JULIAN’,’20100101′,3)                       

— Control de errores

SET NOCOUNT ON

BEGIN TRY
   INSERT INTO
ALUMNOS VALUES (2,’JULIAN’,’20100101′,3)
END TRY

BEGIN CATCH
   SELECT
ERROR_NUMBER() AS NUMERO,
          ERROR_SEVERITY() AS SEVERIDAD,
          ERROR_STATE() AS ESTADO,
          ERROR_MESSAGE() AS MENSAJE
END CATCH

— Transacciones
— Intentaremos insertar 3 registros, 2 buenos y 1 errado

BEGIN TRANSACTION

BEGIN TRY
   — Registro valido
   INSERT INTO ALUMNOS VALUES (2,’ALDO’,’20100101′,17)                       
   INSERT INTO ALUMNOS VALUES (2,’VICTOR’,’20100101′,18)                       
   — Registro no valido
   INSERT INTO ALUMNOS VALUES (3,’JUAN’,’20100101′,3)                          
 
   COMMIT TRANSACTION
END TRY

BEGIN CATCH
   ROLLBACK TRANSACTION  
   RAISERROR
(‘Se ha generado un error al insertar’,16,1)
END CATCH

 — Ver la tabla ALUMNOS

SELECT * FROM ALUMNOS

— Anidamiento de errores
— Creamos una tabla para la auditoria de errores

IF OBJECT_ID(‘LOG_ERRORES’) IS NOT NULL
   DROP TABLE LOG_ERRORES
GO

CREATE TABLE LOG_ERRORES
(ID INT IDENTITY,NUMERO BIGINT,MENSAJE VARCHAR(1000) NOT NULL)
GO

SET NOCOUNT ON

— Dara un error porque la edad no cumple con el check
BEGIN TRY
   INSERT INTO ALUMNOS VALUES (2,’ABELARDO’,’20100101′,3)                       
END TRY

BEGIN CATCH
   BEGIN TRY
     — Intentemos insertar el error en al tabla de auditoria de errorres
     — pero no pasemos el mensaje con lo cual da error
        INSERT INTO LOG_ERRORES (NUMERO,MENSAJE) VALUES (ERROR_NUMBER(),NULL)
   END TRY
 
   BEGIN CATCH
       PRINT ‘NO SE PUDO GUARDAR EN LA TABLA LOG_ERRORES’
   END CATCH

END CATCH

— Limpiemos las 2 tablas

DROP TABLE ALUMNOS;
DROP TABLE LOG_ERRORES;

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: