8

He visto el uso de transacciones en algunos casos, pero nunca entendí realmente en qué situaciones deberían usarse. ¿Cómo y cuándo se deben usar las transacciones (comience el extracto de la transacción)? He leído que Microsoft no sugiere usar declaraciones de transacción (commit, rollback) dentro de un disparador y procedimiento almacenado.Cómo usar las transacciones (comenzar transacción, confirmar transacción)?

Respuesta

5

Las transacciones se pueden utilizar junto con el manejo de errores en procedimientos almacenados o scripts SQL al insertar o manipular datos para asegurarse de que todo sea coherente.

Por ejemplo, si tiene un procedimiento almacenado que inserta registros en una tabla primaria y una tabla secundaria, querrá asegurarse de que el registro principal se inserta primero; si falla, puede deshacer los cambios para que no tenga un registro de niño huérfano.

Erland Sommarskog tiene un great article sobre cómo utilizar el manejo de errores en SQL Server.

Por último, ¿dónde ha sugerido Microsoft no usar transacciones en procedimientos almacenados? Pensaría que los procedimientos almacenados serían un lugar ideal para usarlos.

+0

Gracias, tal vez mi afirmación sobre era demasiado recto: hay una advertencia de que el uso de confirmar o deshacer dentro de un procedimiento o activador puede provocar errores: http://msdn.microsoft.com /en-us/library/ms187844(v=SQL.100).aspx – juur

2

Si yo estaba transfiriendo moey de una cuenta a otra, me gustaría que fuera 100% de éxito o el 100% de fracaso:

UPDATE PersonalAccount SET Balance = Balance - 100 WHERE Username = 'gbn' 
--what if the server caught fire here? 
UPDATE SavingsAccount SET Balance = Balance + 100 WHERE Username = 'gbn' 

En cuanto a lo que se lee, excepto completa basura sin necesidad de utilizar COMIENZA TRAN en un desencadenador.

Un ejemplo de "Nested stored procedures containing TRY CATCH ROLLBACK pattern?"

Cuestiones relacionadas