Pregunta

Hace unos minutos, mientras trabajaba en un nuevo sproc, ejecuté la declaración de eliminación incorrecta. Algo como esto:

Delete From SomeTable Where SomeStatusID=1

10 segundos después, me di cuenta de que escribí el estado incorrecto y presioné cancelar. Dijo que la declaración fue cancelada.

Realicé una restauración en una base de datos separada para recuperar la tabla que presumiblemente nukeé, pensando que dado que esto no estaba en una transacción, probablemente se eliminaron algunos registros.

Curiosamente, los registros estaban todos intactos. Simplemente curioso por qué fue esto: ¿trató la declaración de eliminación individual como una transacción en este caso, a pesar de que no se definió una transacción explícita?

¿Fue útil?

Solución

Por defecto, una sola instrucción DML se ejecuta como una transacción. Si la declaración tiene éxito, la transacción se confirma. Si el estado de cuenta se cancela o falla, la transacción se revierte.

Este comportamiento está integrado en el motor y no está relacionado con el estudio de administración. Consulte Transacciones de confirmación automática en los documentos.

Otros consejos

Hay siempre transacciones. Lo único que cambia es cómo esas transacciones están aisladas unas de otras y que en el estudio de administración la transacción podría no definirse explícitamente y se confirma automáticamente cuando finaliza la consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top