Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Entre las habilidades de todo Sistema Gestor de Bases de Datos Relaciones tiene que
estar la de permitir al programador crear transacciones.
INTRODUCCION:
Una transaccin es un conjunto de operaciones que van a ser tratadas como una nica
unidad. Estas transacciones deben cumplir 4 propiedades fundamentales comnmente
conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad).
La transaccin ms simple en SQL Server es una nica sentencia SQL. Por ejemplo,
una sentencia como esta:
USE NorthWind
DECLARE @Error int
--Declaramos una variable que utilizaremos para almacenar un posible cdigo d
e error
BEGIN TRAN
--Iniciamos la transaccin
UPDATE Products SET UnitPrice=20 WHERE ProductName ='Chai'
--Ejecutamos la primera sentencia
SET @Error=@@ERROR
--Si ocurre un error almacenamos su cdigo en @Error
--y saltamos al trozo de cdigo que deshara la transaccin. Si, eso de ah es
un
--GOTO, el demonio de los programadores, pero no pasa nada por usarlo
--cuando es necesario
IF (@Error<>0) GOTO TratarError
--Si llegamos hasta aqu es que los dos UPDATE se han completado con
--xito y podemos "guardar" la transaccin en la base de datos
COMMIT TRAN
TratarError:
--Si ha ocurrido algn error llegamos hasta aqu
If @@Error<>0 THEN
BEGIN
PRINT 'Ha ecorrido un error. Abortamos la transaccin'
--Se lo comunicamos al usuario y deshacemos la transaccin
--todo volver a estar como si nada hubiera ocurrido
ROLLBACK TRAN
END
EJEMPLOS:
BEGIN TRAN
-- Primer BEGIN TRAN y ahora @@TRANCOUNT = 1
BEGIN TRAN
-- Ahora @@TRANCOUNT = 2
COMMIT TRAN
-- Volvemos a @@TRANCOUNT = 1
-- Pero no se guarda nada ni se hacen efectivos los posibles cambios
COMMIT TRAN
-- Por fin @@TRANCOUNT = 0
-- Si hubiera cambios pendientes se llevan a la base de datos
-- Y volvemos a un estado normal con la transaccin acabada
BEGIN TRAN
-- Primer BEGIN TRAN y @@TRANCOUNT = 1
BEGIN TRAN
-- Ahora @@TRANCOUNT = 2
COMMIT TRAN
-- Como antes @@TRANCOUNT = 1
--Y como antes nada se guarda
ROLLBACK TRAN
-- Se cancela TODA la transaccin. Recordemos que el COMMIT
-- de antes no guardo nada, solo redujo @@TRANCOUNT
-- Ahora @@TRANCOUNT = 0
COMMIT TRAN
-- No vale para nada porque @@TRANCOUNT es 0 por el efecto del ROLLBACK
USO DEL ROLLBACK (SAVE TRAN)
BEGIN TRAN
INSERT INTO Tabla1 VALUES ('Primer valor')
SAVE TRAN Punto1
INSERT INTO Tabla1 VALUES ('Segundo valor')
ROLLBACK TRAN Punto1
INSERT INTO Tabla1 VALUES ('Tercer valor')
COMMIT TRAN