Eu abro uma transação (leitura repetível) ( BEGIN TRAN
) para fazer algum trabalho em determinados registros. A primeira coisa que faço é verificar se os dados que preciso alterar estão no banco de dados. Em alguns casos haverá e então prossigo para minhas alterações. Mas em alguns casos não haverá nada a fazer. Nesse caso, eu COMMIT TRAN
ou ROLLBACK TRAN
e volto do procedimento armazenado. Neste momento nenhuma mudança foi feita nos dados ainda, então o efeito de commit e rollback é o mesmo.
Há alguma consideração que devo estar ciente sobre a escolha entre confirmação e reversão? Existe custo de desempenho diferente? Outras considerações?
Tendo executado isso por meio de uma sessão de depuração (para atualizar minha memória com falha):
Você pode ver muito disso usando DMVs, por exemplo:
Testando no AdventureWorks:
Resultado:
De um ponto de vista puramente prático (como Aaron observou em um comentário), provavelmente é mais seguro emitir uma reversão para garantir que nenhuma alteração seja feita, caso o código seja modificado no futuro. Portanto, é tudo uma questão de intenção: sem alterações = reversão.
Aliás,
REPEATABLE READ
é um nível de isolamento incomum para escolher; nem sempre funciona como as pessoas intuitivamente esperam . Dependendo de seus requisitos, você pode achar que oSNAPSHOT
isolamento é mais adequado.