Sei sulla pagina 1di 3

[SQL]Procedimiento almacenado para Insertar datos con transaccin y control de errores.

Hola amigos, en muchas ocasiones no sabemos si estamos realizando correctamente un proceso de insercin, actualizacin o eliminacin de datos a una tabla(s), esto para muchos es sumamente sencillo, pero me di a la tarea de preparar un pequeo ejemplo de esto. El script de TSql consiste en realizar un procedimiento almacenado que reciba los datos necesarios para insertarlos en la tabla, para garantizar la ejecucin correcta de las inserciones utilizo las transacciones Transact SQL y para validar la reversin de la transaccin en caso de que ocurra unERROR utilizo el control de Errores Try Catch con RollBack. Qu es una Transaccin? Una transaccin es un conjunto de operaciones T-SQL que funcionan como un solo bloque de instrucciones, esto significa que si ocurre un fallo durante la ejecucin de alguna instruccin del bloque todas las dems fallaran, lo que implica que nada ms se ejecutara y la transaccin tendr que deshacer todo lo que haba ejecutado hasta donde ocurri el fallo, a eso se la llama reversin de la transaccin y se ejecuta con unROLLBACK, en caso de una ejecucin correcta se tendr que grabar la transaccin con COMMIT, el objetivo de las transacciones es garantizar que los datos que se inserten, actualicen o eliminen queden CONSISTENTES en la base de datos. Despus de una ligera explicacin de las Transacciones veremos el siguiente ejemplo de una insercin dentro de un procedimiento almacenado con transaccin. Definiendo las estructuras. 1. La estructura del SP es: CREATE PROCEDURE nombreProdedimiento -- Parmetros del SP @Param1 AS Varchar(25), @Param2 AS Bigint . AS BEGIN -- Insertar bloque de instrucciones a ejecutar. /* SELECT UPDATE INSERT DELETE Lo que quieras.... */ END GO

2. La estructura del control de errores TRY-CATCH es: Begin Try /*Bloque de instrucciones a validar.

-----------------------------------------*/ End Try Begin Catch /*Bloque de instrucciones que se ejecutan si ocurre un ERROR. -----------------------------------------*/ End Catch 3. La estructura de una Transaccin es: Begin Tran NombreTransaccion--Inicio de la transaccin con su nombre Tadd o el que elijas. /*Bloque de instrucciones a ejecutar en la Transaccin ---------------------------------------*/ Commit Tran NombreTransaccion--Confirmacin de la transaccin. Rollback Tran NombreTransaccion--Reversin de la transaccin. 4. Para finalizar veremos todo lo anterior armado ya en conjunto de SP, Transaccin y control de Errores. -- ============================================= -- Author: Ivan Rangel Cuadros.

-- Create date: 22/Ene/2009 -- Description: Procedimiento para Insertar registros en una Tabla con transaccin y control de errores.

-- ============================================= CREATE PROCEDURE spAgregaUsuario @nom AS VARCHAR(50), @ape AS VARCHAR(50), @ema AS VARCHAR(30), @pas AS VARCHAR(20), @idJer AS BIGINT, @msg AS VARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try

INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add) VALUES (@nom, @ape, @ema, @pas, GETDATE()) INSERT INTO dbo.USUARIO_JERARQUIAS_SYS (id_usuario, id_jerarquia) VALUES (@@IDENTITY, @idJer) SET @msg = 'El Usuario se registro correctamente.' COMMIT TRAN Tadd End try Begin Catch SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la lnea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.' Rollback TRAN Tadd End Catch END GO Explicando el procedimiento: 1. Recibe los datos a travs de parmetros de los cuales uno es de salida OutPut , que servir para indicar si la Insercin se realizo correctamente o no. 2. Crea una transaccin llamada Tadd, valida con TRY-CATCH las inserciones a las tablas USUARIO y USUARIO_JERARQUIAS . 3. Si las operaciones de insercin se ejecutan correctamente las confirma con COMMIT TRAN Tadd y regresa la variable @msg con un valor de confirmacin correcto, si ocurre un error se revierte la transaccin con ROLLBACK TRAN Tadd y devuelve en@msg un valor de error. Ejecutando el Procedimiento: DECLARE @msg AS VARCHAR(100); EXEC spAgregaUsuario 'Claudia','Perez Torres','clau@mail.com','a220109',1,@msg OUTPUT SELECT @msg AS msg Mensaje de insercin correcta:

Mensaje de Error en la Transaccin:

Potrebbero piacerti anche