2010-08-07 10 views
5

¿Cómo puedo escribir el procedimiento de manera que pueda REPLIEGUE todas las instrucciones INSERTAR, ACTUALIZAR y ELIMINAR cuando CUALQUIER instrucción haya tenido un error?Revertir todo el procedimiento (todas las instrucciones)

Tenga en cuenta que mi procedimiento puede y no tener las declaraciones enumeradas en secuencia. En otras palabras, tengo una instrucción INSERT, luego una lógica IF, luego una instrucción select, luego otra INSERT, luego una ACTUALIZACIÓN, seguida por una declaración lógica DELETE, etc.

Solo quiero ROLLBACK todo el INSERTO, Las sentencias UPDATE y DELETE si ocurriera un error para cualquier instrucción. Encontré este código http://msdn.microsoft.com/en-us/library/ms181299.aspx y http://en.allexperts.com/q/MS-SQL-Server-1801/Rollback-SP.htm

Pero no responden a mi pregunta.

Respuesta

4

Si la transacción se ejecuta con la opción XACT_ABORT, esto sucederá automáticamente.

set xact_abort on 
begin tran 

/*Your code*/ 


commit 

Aquí hay bastante interesting question discutiendo el uso de este vs el manejo de errores estructurados.

2

Lo que está describiendo se denomina "Procesamiento de transacciones de base de datos". Crea una construcción que es "todo o nada" en términos de escribir datos en su base de datos.

Crea un marco lógico donde todas las tablas se actualizan juntas, pero si una tabla no puede actualizarse, entonces la transacción completa se retrotrae a un estado anterior.

La mayoría de los DB lo hacen de esta manera. Pseudo-código sigue.

 
Begin transaction 
    Update Table One 
    Update table Two 
    [Update lots of tables] 
    if all updates successfull 
     commit (All changes to all tables) 
    else 
     rollback (All changes) 
End transaction 

Tenga en cuenta que los términos "transacción", "cometer" y "reducción" son típicamente los términos técnicos utilizados por la mayoría de DB también.

Enlace que podría explicarlo mejor que yo. http://www.subbu.org/articles/nuts-and-bolts-of-transaction-processing

Mire en los documentos de su base de datos y encontrará referencias sobre todo esto.

HTH, si no comentas y volveré a intentarlo. :-)

Cuestiones relacionadas