Está en la página 1de 3

DOCUMENTO COMPLEMENTARIO CAPITULO 17

TRANSACCIONES
El procesamiento de transacciones de SQL Server asegura que todos los comandos
dentro de una transaccin se ejecuten como una unidad de trabajo , incluso en
presencia de un fallo de hardware de sistema o de un fallo general
Por defecto SQL Server trata cada sentencia, se haya enviado individualmente o como
parte de un proceso por lotes, independientemente y la confirma inmediatamente. As
cualquier sentencia de modificacin de datos es por s misma es una transaccin
Implcita
Si quiere que una transaccin incluya varias sentencias, debe agruparlas dentro de
sentencias BEGIN TRANSACTION Y COMMIT TRANSACTION o ROLLBACK
TRANSACTION
Tambin puede configurar SQL Server para arrancar implcitamente una transaccin
utilizando SET IMPLICIT_TRANSACTIONS ON. Si se habilitan las transacciones
implcitas se consideran todas las sentencias parte de una transaccin y no se confirma
el trabajo hasta que al menos se ejecute un COMMIT TRAN (o su sinnimo
COMMIT WORK) explcito.
Los errores sintcticos siempre causan que se aborte el proceso por lotes completo
incluso antes de comenzar la ejecucin. Las referencias a objetos no existentes , por
ejemplo un SELECT de una tabla que no existe , provoca que el proceso por lotes
detenga la ejecucin en ese punto, sin embargo esto no significa que abortar un
proceso por lotes implique deshacer la transaccin
Si recibe un error y no est seguro de si ha deshecho su transaccin, puede comprobar
el estado de la transaccin utilizando la funcin de sistema @@TRANCOUNT. Si
@@TRANCOUNT >0 entonces hay una transaccin activa y puede ejecutar
ROLLBACK TRAN
Un desencadenador tiene acceso a la imagen anterior y posterior de los datos
mediante las pseudotblas especiales INSERTED y DELETED. Estas tablas tiene el
mismo conjunto de columnas que la tabla modificada . Puede comprobar los valores
anteriores y posteriores de columnas especficas y efectuar acciones dependiendo de
lo que encuentre . Estas tablas no son estructuras fsicas sino que SQL Server las
construye a partir del registro de transacciones
Bloques De Transaccin Anidados:
Un ROLLBACK deshace todos los niveles de la transaccin, no solo su bloque
interno. Solo el COMMIT ms externo es capas de confirmar la transaccin, pero
cualquier ROLLBACK deshar la transaccin completa en todos los niveles.
Ejecutar un ROLLBACK TRAN deshace la transaccin completa y cambia
@@TRANCOUNT a cero. Ejecutar un ROLLBACK o un COMMIT TRAN SIN
TRANSACCIONES ABIERTAS dar como resultado un error

Puntos De Almacenamiento:
Un Punto de almacenamiento proporciona un punto en el cual se puede deshacer la
transaccin (Punto de rollback). SQL Server permite usar puntos de almacenamiento
mediane la sentencia SAVE TRAN, que no afecta al valor @@TRANCOUNT. Un
ROLLBACK a un punto de almacenamiento tampoco afecta al valor devuelto por
@@TRANCOUNT , pero en este caso el ROLLBACK debe especificar
explcitamente el nombre del punto de almacenamiento

CURSORES
Un cursor siempre limita su mbito a la conexin que lo declara. Un cursor no es
visible para otras conexiones; as otras conexiones pueden tener cursores del mismo
nombre.
La sentencia DECLARE especifica el tipo de movimiento posible utilizando las
palabras clave SCROLL y FORWARD_ONLY.
FORWARD_ONLY............(Por defecto)
SCROLL.............................Static
.............................................KeySet
.............................................Dynamic
La sentencia DECLARE tambin determina lo sujeto a cambios que est el
conjunto de resultados del cursor:
READ_ONLY: Impide que la conexin que abri el cursor haga modificaciones a
travs de este .No se puede hacer referencia a un cursor READ_ONLY mediante la
clusula WHERE CURRENT OF en una sentencia UPDATE o DELETE
FETCH: Captura una fila del cursor en la direccin especificada. El resultado de la
captura puede evaluarse a travs de la variable @@FETCH_STATUS, AS
0: Una captura con xito
-1: No hay ms filas
-2: La fila se considera desparecida. Podra haber sido borrada por algn otro usuario
o por una operacin dentro del cursor
Por defecto la sintaxis de Transact-SQL crea cursores estticos desplazables

También podría gustarte