Archivo Jflex
Enviado por loydacocomb • 21 de Noviembre de 2013 • 359 Palabras (2 Páginas) • 292 Visitas
¿Porque usamos transacciones?
Bueno aquí la cosa parece simple verdad, básicamente usamos transacciones para poder asegurar integridad de una operación, si por ejemplo necesitamos guardar una factura y esta se compone de Cabecera y Detalle no se debería guardar si hubo algún error en el detalle.
También podríamos mencionar otros ejemplos, donde se necesitan hacer mas de una operación y de fallar alguna no aplicar nada.
Tenemos dos tipos de transacciones en SQL Server, las implícitas y las explicitas.
Las primeras son aquellas que no debemos indicarle al SQL que hacemos una transacción pero el lo genera, por ejemplo como el siguiente caso.
DELETE FROM CLIENTES
WHERE PAIS = 'ARGENTINA'
Aquí se ejecutara el delete para todos los clientes que cumplan la condición de Argentina, si hay un error al intentar borrar un cliente se hará un rollback y no se borrara ninguno, esto se debe a que el delete al igual que el insert y update internamente arman una transacción.
Las transacciones explicitas son aquellas que nosotros indicamos con la sentencia Begin Transaction / Commit o Rollback Transaction.
BEGIN TRANSACTION
INSERT INTO EMPLEADOS (ID, NOMBRE)
VALUES (1,'CONDUIT')
DELETE FROM AUDITORIA
WHERE EMPLEADO = 1
COMMIT TRAN
¿Como funciona el Commit y Rollback?
El commit es el que confirmara la transacción y el rollback es el que la deshará, pero aquí hay algunos detalles muy importantes en su comportamiento cuando usamos transacciones anidadas.
Primero veamos un ejemplo simple
CREATE TABLE #T1 (ID INT, NOMBRE VARCHAR(50))
GO
CREATE TABLE #T2 (ID INT, FECHA DATETIME NOT NULL)
GO
BEGIN TRY
BEGIN TRAN
INSERT INTO #T1 VALUES (1,'CONDUIT')
INSERT INTO #T1 VALUES (1,GETDATE())
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
SELECT @@ERROR
END CATCH
En el ejemplo básicamente hacemos dos insert y si hay algún error entramos en la sección del Catch y lo primero que hacemos es el rollback para luego mostrar el error.
Este es un simple ejemplo donde si no hay problemas se harán los dos insert y el commit los confirmara y de haber un error en algún insert se hará Rollback.
...