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
Twittear
No hay comentarios:
Publicar un comentario