Essa dica rápida é direcionada principalmente para os desenvolvedores que gostam de criar procedures enormes no SQL Server com regras de negócio.
Você sabia que é possível criar um ponto de restauração de uma transação? Claro! Através de backup.
Contudo, não é de backup que estou falando, simplesmente criar uma tag na transação para fazer o rollback até um determinado ponto do código.
Por mais que esse título pareça algo complicado, estou falando de algo simples, do comando save transaction.
Imagine que você iniciou a transação e neste ponto cria um save-point da transação, se parte da transação é condicionalmente cancelada você pode utilizar o rollback transaction.
Veja o exemplo abaixo:
select * from Person.Person where BusinessEntityID = 21
go
Begin TRAN
begin try
Save TRAN upPessoa
update Person.Person set Title = 'Mr' where BusinessEntityID = 21
RAISERROR ('meu erro',16 ,1);
END TRY
Begin CATCH
print 'rollback'
ROLLBACK TRAN upPessoa
end CATCH
COMMIT TRAN
go
select * from Person.Person where BusinessEntityID = 21
O exemplo acima tem apenas a função de ilustrar a volta da transação até o ponto salvo. Nele podemos ver, que após salvar a transação executaremos um comando update e na sequência geramos um erro utilizando o comando RaiseError, assim, o ponto de execução cai no Catch que faz o rollback para a transação salva.
Para saber mais sobre está feature recomendo a leitura do docs da Microsoft.
Espero que essa dica seja útil para você. Até a próxima!
Abraço, Rodrigo