Está en la página 1de 4

TRANSACCIONES EN SQL SERVER

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:

UPDATE Productos SET UnidadPrecio=20 WHERE NombreProducto ='Gloria'

SENTENCIAS PARA UNA TRANSACCION

La sentencia que se utiliza para indicar el comienzo de una transaccin es 'BEGIN


TRAN'. Si alguna de las operaciones de una transaccin falla hay que deshacer la
transaccin en su totalidad para volver al estado inicial en el que estaba la base de datos
antes de empezar. Esto se consigue con la sentencia 'ROLLBACK TRAN'.
Si todas las operaciones de una transaccin se completan con xito hay que marcar el
fin de una transaccin para que la base de datos vuelva a estar en un estado consistente
con la sentencia 'COMMIT TRAN'.
EJEMPLOS:

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 la primera sentencia se ejecuta con xito, pasamos a la segunda


UPDATE Products SET UnitPrice=20 WHERE ProductName='Chang'
SET @Error=@@ERROR
--Y si hay un error hacemos como antes
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:

USO DEL BEGIN

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

USO DEL COMMIT

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)

CREATE TABLE Tabla1 (Columna1 varchar(50))


GO

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

SELECT * FROM Tabla1


Columna1
--------------------------------------------------
Primer valor
Tercer valor
(2 filas afectadas)

También podría gustarte