Creación y administración de transacciones
Para iniciar explícitamente una transacción, use BEGIN TRANSACTION o la versión abreviada BEGIN TRAN.
Una vez iniciada una transacción, debe terminarla ya sea con:
- COMMIT TRANSACTION, o
- ROLLBACK TRANSACTION.
Esto garantiza que todas las instrucciones de la transacción se confirman juntas o, si se produce un error, se revierten juntas.
Las transacciones duran hasta que se emite un comando COMMIT TRANSACTION o ROLLBACK TRANSACTION o se quita la conexión. Si la conexión se interrumpe a mitad de una transacción, se revierte toda la transacción.
Las transacciones pueden estar anidadas, en cuyo caso las transacciones internas se revertirán si la transacción externa se revierte.
No se detecta ningún error
Cuando las instrucciones de la transacción se completen sin errores, use COMMIT TRANSACTION, que algunas veces se abrevia como COMMIT TRAN. Esto confirma los cambios en la base de datos. Esto también liberará recursos como bloqueos mantenidos durante la transacción.
Si se detecta un error
Si se produjo un error en la transacción, use el comando ROLLBACK.
ROLLBACK deshace las modificaciones realizadas en los datos durante la transacción, dejando en el estado que estaba antes de que se iniciara la transacción. ROLLBACK también libera recursos, como bloqueos, retenidos para la transacción.
XACT_ABORT
Cuando SET XACT_ABORT está activado, si SQL Server genera un error, se revierte toda la transacción. Cuando el estado de SET XACT_ABORT es OFF, solo se revierte la instrucción que produjo el error si la gravedad del error es baja.
Por ejemplo, cuando el estado de SET XACT_ABORT es OFF, una transacción tiene tres instrucciones. Dos no tienen errores, pero el tercero viola una restricción de comprobación. En este ejemplo, aunque las tres instrucciones estén en una transacción, se confirman dos de ellas. En el mismo ejemplo, si el error se hubiera producido por un tipo de datos incorrecto, habría sido lo suficientemente grave como para emitir una reversión y no se habría confirmado ninguna de las instrucciones.
Dado que no siempre está claro si la transacción se confirmará o revertirá, es esencial agregar el control de errores a las transacciones.