Documentos de Académico
Documentos de Profesional
Documentos de Cultura
c
c
c
c
c
Una transacción propiamente es un acceso a la Base de Datos. Las
Transacciones fueron implementadas en el mundo Fox en la versión 3.0 pero en
otras Bases de Datos existen desde hace tiempo.
2
2
!
"
r¦
cc
c
c
cc
c
c
c
c
c
c
r
c cc
c
c c
c
c
c
ccc
c
cc
c
c
cc
c
c
cc
c c
ru
ccc
c
c c
c
c
c
c
c
c
c
c
c
c
c
ccc
c
cc c
c
c
c
c
c
cc
c
c
c
c
c
c
c
c
ccc
cc
½
cc
VFP SQL Server
BEGIN TRANSACTION BEGIN TRANSACTION
SET IMPLICIT_TRANSACTIONS ON
END TRANSACTION COMMIT
ROLLBACK ROLLBACK
TnxLevel() @@TranCount
cc
Ô TRASACT Incia la transacción
RLLÔACK Vuelve a la situación original sin
cambios desde el último BEGIN TRANSACTION
TRASACTCT Bloquea los registros, graba a disco todos
los cambios hechos en las tablas de las base de datos desde el
más reciente BEGIN TRANSACTION. A continuación bloquea los
registros.
2
2
En SQL Server las Transacciones son algo diferentes pues se pueden
distinguir de dos tipos: implícitas o explícitas.
Las Transacciones Implícitas las crea el propio sistema y las explícitas las
escribes tú empezando con BEGIN TRANSACTION y acabando con COMMIT o
ROLLBACK
Como se puede ver este código es mucho más limpio y fácil de seguir. La
variable @@TranCount nos devuelve el número de transacción.
En SQL Server tenemos algunas otras opciones que nos pueden servir de
utilidad como la variable @@NESTLEVEL que nos indica en que nivel de
profundidad de las transacciones estamos metidos.
°
¦
!"# $
%& %
' '
"(#¦)
!"#
$
%&
' '
¦(**!!"#
!
%+
,
USE NorthWind
DECLARE @Error int
--Declaramos una variable que utilizaremos para almacenar un posible
código de error
BEGIN TRAN
--Iniciamos la transacción
UPDATE Products SET UnitPrice=20 WHERE ProductName ='Chai'
--Ejecutamos la primera sentencia
SET @Error=@@ERROR
--Si ocurre un error almacenamos su código en @Error
--y saltamos al trozo de código que deshara la transacción. 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 transacción en la base de datos
COMMIT TRAN
TratarError:
--Si ha ocurrido algún error llegamos hasta aquí
If @@Error<>0 THEN
BEGIN
PRINT 'Ha ecorrido un error. Abortamos la transacción'
--Se lo comunicamos al usuario y deshacemos la transacción
--todo volverá a estar como si nada hubiera ocurrido
ROLLBACK TRAN
END
c
c
c
c
ccc
c
ccc
'
'
'
c c c
c
c c
c
'
'
'
c