Manejo de transacciones en un procedimiento almacenado

martes, 27 de octubre de 2009
El manejo de transacciones puede ser administrado ya sea desde la aplicación, la capa de acceso a datos o la misma capa de datos, la decisión de donde realizar esta administración depende exclusivamente del arquitecto que este a cargo del proyecto en el que estamos trabajando o en su defecto del Líder técnico del mismo.

En este post lo que quiero mostrar es como se pueden manejar transacciones desde un procedimiento almacenado, es un ejemplo bastante simple pero my útil al momento de realizar muchas operaciones dentro de un mismo contexto, si algo sale mal la Base de datos no debería quedar corrupta y/o dañada por un error que puede ser atribuible a causas externas a la aplicación como caidas de la red o que el servidor simplemente no responde.



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Andres Ureña
-- Create date: 27/10/2009
-- Description: Demo de uso de transacciones en Procedimientos almacenados
-- =============================================
CREATE PROCEDURE SPConManejoDeTransacciones
@Dato1 int,
@dato2 int,
@dato3 varchar(10)
AS
BEGIN
BEGIN TRY
/*
Iniciar la transaccion antes de comenzar con la modificacion de datos
*/
BEGIN TRANSACTION DEMOTRANSACCION
/*
Comenzamos con la modificacion de los datos
*/
INSERT INTO TABLA1(DATO1) VALUES(@DATO1)
UPDATE TABLA2 SET DATO3=@DATO3 WHERE DATO2=@DATO2
/*
si todo salio bien se hace un commit de la transaccion
*/
COMMIT TRANSACTION DEMOTRANSACCION
END TRY
BEGIN CATCH
/*
Algun error ha sucedido, es necesario devolver este con
su numero respectivo hacia la aplicacion
*/
ROLLBACK TRANSACTION DEMOTRANSACCION
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage
END CATCH
END
GO

Este procedimiento puede ser consumido de muchas formas, y desde cualquier plataforma, en este caso la sintaxis es de SQL Server 2005 y la aplicación que lo consume es una aplicación Web implementada en ASP.Net 2.0, pero podría ser utilizado desde un entorno Java, COM u otro siempre y cuando se tenga acceso a la base de datos y se tengan permisos de ejecución sobre procedimientos almacenados.

0 comments:

Publicar un comentario