Hola, mi comprensión actual de las transacciones anidadas en TSQL es que si tienes múltiples transacciones (varias transacciones anidadas dentro de una transacción "externa"), todas las partes de tranas deben ser confirmadas (con la transacción "externa" siendo el último) para que se realicen cambios en la base de datos. Si el número de commits es menor que el número de transacciones abiertas, entonces no se realizan cambios relacionados con ninguna de las transacciones. ¿Es esta una descripción correcta de cómo funcionan las transacciones anidadas?Transacciones anidadas en TSQL
Respuesta
Su descripción de COMMIT
es correcta.
Kalen Delaney has an article covering the same type of behavior that you describe.
Sin embargo, como se discute en el artículo de Kalen, un ROLLBACK
dentro de una transacción anidada se deshacer toda la transacción exterior, no sólo la transacción interior donde se produce la reversión.
nota los siguientes resultados:
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
ROLLBACK TRAN
SELECT @@trancount
Esto se describe en el artículo de MSDN, Nesting Transactions:
Un ROLLBACK WORK o un ROLLBACK TRANSACTION que no tiene un nombre de transacción se deshace todas las transacciones y decrementos anidados @@ TRANCOUNT a 0. Una TRANSACCIÓN DE ROLLBACK que utiliza la transacción nombre de la transacción más externa en un conjunto de transacciones anidadas revierte todas las transacciones anidadas y decrementa @@ TRANCOUNT a 0. Cuando no está seguro si ya está en una transacción, SELECCIONE @@ TRANCOUNT para determinar si es 1 o más. Si @@ TRANCOUNT es 0, usted no está en una transacción.
En resumen, su respuesta es sí. De Nesting Transactions:
confirmar las transacciones interiores es ignorado por la base de datos de SQL Server motor. La transacción se confirma o se retrotrae según la acción tomada al final de la transacción más externa. Si se confirma la transacción externa , las transacciones anidadas internas también se comprometen con . Si la transacción externa se retrotrae, todas las transacciones internas de también se retrotraen, independientemente de si las transacciones internas de se han comprometido o no por separado.
En cuanto a ROLLBACks, solo se permite ROLLBACK la transacción externa completa.
- 1. Transacciones anidadas en .NET
- 2. TSQL - Desactivar disparadores en transacciones
- 3. Transacciones anidadas en postgresql 8.2?
- 4. transacciones anidadas en SQL Server
- 5. transacciones anidadas con TransactionScope
- 6. Propósito de las transacciones anidadas
- 7. ¿Cómo hago transacciones anidadas en NHibernate?
- 8. Transacciones anidadas APP y el bloqueo
- 9. ¿Cómo habilito las transacciones anidadas con ADO.NET y SQL Server?
- 10. Transacciones de Mysql dentro de transacciones
- 11. ¿Cuál es el alcance del aislamiento en las transacciones anidadas en SQL Server?
- 12. Cómo rollback transacciones anidadas con Propagation.REQUIRES_NEW en la integración de las pruebas
- 13. Mejores prácticas de transacciones
- 14. ¿CHECKPOINT funciona igual que COMMIT en TSQL?
- 15. ¿Simular enumeraciones en TSQL?
- 16. TSQL - Caso - ¿Valores en?
- 17. ¿Cómo puedo asegurarme de que las transacciones anidadas se confirman de forma independiente?
- 18. Necesito ayuda con las operaciones atómicas anidadas que implican transacciones PDO
- 19. transacción tsql
- 20. Transacciones en Typed DataSets
- 21. Transacciones en C#
- 22. ¿Transacciones en REST?
- 23. Transacciones en Talend
- 24. Transacciones en C#
- 25. Transacciones en .net
- 26. ¿Qué hace "%% DatabaseEx" en TSQL?
- 27. TSQL - ISNULL en varias columnas
- 28. Especialización en plantillas anidadas
- 29. Consultas anidadas en Arel
- 30. ¿Cómo se comportan las llamadas dosync anidadas?