SQL Server – Rollback Transaction em Triggers
O que acontece se executar o comando ROLLBACK TRANSACTION em uma Trigger no SQL Server? A primeira coisa que passa na cabeça é: o que foi iniciado na transação será desfeito! Sim, isso está correto. Mas se pensarmos um pouco mais além: e se após este comando houver outros comandos, eles serão executados? E se estes comandos causarem o disparo de outra trigger, ela será disparada? E os outros comandos que que estão no batch após o comando que originou o disparo da trigger, serão executados?
O comportamento é seguinte:
- As alterações feitas até a execução do ROLLBACK TRANSACTION são desfeitas;
- A trigger continua a execução com os demais comandos que houverem após o ROLLBACK, mas nenhuma outra trigger será disparada;
- Os demais comandos que houverem no batch também não serão executados.
Ou seja, imaginemos o seguinte cenário: em uma trigger é implementada uma regra de negócio. Regra esta que em determinada condição precisa interromper a transação. Mas você gostaria de gravar um trace da execução dessa trigger. Ok! Após o ROLLBACK TRANSACTION é possível executar um comando INSERT para inserir o trace em outra tabela!
Se quiserem saber mais sobre o comando ROLLBACK TRANSACTION acessem o MSDN!
Abraços!