USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 10;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 11;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 12;
GO
COMMIT TRANSACTION;
GO
¿Qué sucede si falla la primera instrucción de eliminación? ¿Se ejecutarán las declaraciones de eliminación 2ª y 3ª? El ejemplo no tiene ningún manejo de errores, ¿dejará una transacción abierta en el caso de una excepción o SQL Server revertirá la transacción automáticamente? Abrir transacción = recursos bloqueados, ¿verdad?¿Se requiere ROLLBACK TRANSACTION?
Estoy decidiendo si debo aplicar TRY ... CATCH a procedimientos almacenados que usan transacciones.
Conozco set xact_abort on
, pero quiero saber qué pasa sin él.
Esto es lo que he encontrado en documentos - Control de Transacciones (motor de base de datos):
Si un error impide la finalización con éxito de una transacción, SQL Server revierte automáticamente la transacción y libera todos los recursos en poder de la transacción
Sin embargo, he leído en otras publicaciones que la retrotracción automática no se activa.
Sí, use try ... catch. – Ben