viernes, 15 de mayo de 2015

Transacciones en SQL Server



Una transacción es un conjunto de instrucciones de manipulación de datos que se ejecutan en una misma unidad de trabajo. El ejemplo más claro son las transacciones bancarias.

  • Inicio de una transacción:

BEGIN TRAN[SACTION][NombreTransaccion]

  • Validación de transacción:

COMMIT TRAN[SACTION] [NombreTransaccion]

  • Declaración de punto de control:

SAVE TRAN[SACTION] [NombrePuntoControl]

  • Anulación de Transacción:

ROLLBACK TRAN[SACTION] [NombreTransaccion | NombrePuntoControl]

BEGIN TRAN Modificación
UPDATE Tabla SET ....
UPDATE Tabla1 SET ....
SAVE TRAN a
UPDATE Tabla2 SET ....
UPDATE Tabla3 SET ....
ROLLBACK TRAN a
ROLLBACK TRAN Modificacion
COMMIT TRAN Modificación

El primer Rollback guardaria las que estan en el Begin y el punto de salvamento, deshaciendo las demás ordenes.
Ejemplo de transacciones usando @@ERROR, con esto se almacena el número del error que se ha producido en última instancia. Se actualiza en cada instrucción, por eso después de cada sentencia se debe comprobar el valor de la variable para ver si tiene error. Lo que se hace es crear variables en cada instrucción almacenando el valor de @@ERROR en cada una de ellas. El valor de las variables debe ser entero.

USE PUBS
GO
DECLARE @DEL_ERROR INT, @INS_ERROR INT
BEGIN TRAN
DELETE AUTHORS WHERE AU_ID = '409-56-7088'
SELECT @DEL_ERROR = @@ERROR
INSERT AUTHORS VALUES ('409-56-7088', 'BENNET', 'ABRAHAM', '415 658-9932',
'6223 BATEMAN ST.', 'BERKELEY', 'CA', '94705', 1)
SELECT @INS_ERROR = @@ERROR
IF @DEL_ERROR = 0 AND @INS_ERROR = 0
BEGIN

PRINT 'NO HAY ERRORES NINO NINO'
COMMIT TRAN
END
ELSE
BEGIN
IF @DEL_ERROR <> 0
PRINT 'HAY ERROR EN EL DELETE'
PRINT @INS_ERROR
IF @INS_ERROR <> 0
PRINT 'HAY ERROR EN EL INSERT'
PRINT @INS_ERROR
ROLLBACK TRAN
END
GO


Espero haber ayudado en algo. Hasta la próxima oportunidad!







No hay comentarios:

Publicar un comentario en la entrada