try e catch ( que não é dupla sertaneja ).
Receita de Bolo para não dar bolo no seu banquinho.
Testar se a tramação e em caso de erro informar e recuperar é possível.
Para isto existe a dupla try e catch.
Qualquer coisa vai la no end. https://msdn.microsoft.com/pt-br/library/ms175976.aspx
begin
begin transaction
begin try
-- Executa a Transação desejada que pode dar o erro.
-- Exemplo :
( DELETE UPDATE INSERT REF : https://msdn.microsoft.com/pt-br/library/ms175976.aspx )
commit transaction;
end try
begin catch
-- Muito útil usar um report de erro e ate mesmo enviar por e-mail é.
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_LINE () AS ErrorLine
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_MESSAGE() AS ErrorMessage;
-- Funcoes de erros que podem ser utilizadas :
ERROR_NUMBER() retorna o número do erro.
ERROR_SEVERITY() retorna a severidade.
ERROR_STATE() retorna o número do estado do erro.
ERROR_PROCEDURE() retorna o nome do procedimento armazenado ou do gatilho no qual ocorreu o erro.
ERROR_LINE () retorna o número de linha dentro da rotina que causou o erro.
ERROR_MESSAGE () retorna o texto completo da mensagem de erro. O texto inclui os valores fornecidos para quaisquer parâmetros substituíveis, como comprimentos, nomes de objeto ou horas.
-- Vai volta ao ponto antes do erro da transação.
rollback transaction;
end catch
end