Envie o dbmail em @@ erros do SQL Server 2005
-
26-09-2019 - |
Pergunta
Estou tentando enviar e -mails do banco de dados quando o erro ocorre dentro da transação.My Setup para dbo.sp_send_dbmail está correto, quando executo o proc, recebo um email dentro de 1 min.
No entanto, quando tento usar dbo.sp_send_dbmail dentro de outro Proc dentro das transações do que não recebi o email. O SQL Server mostra na janela de resultado que "email na fila", mas eu nunca a recebo.
Comece a transação
Declarar @err int declarar @test nvarchar (max)
Raaiserror ('This Is A Test', 16, 1) Selecione @err = @@ Erro
Se @err <> 0 começar
Definir @Test = Error_Message ()
EXEC msdb.dbo.sp_send_dbmail
@destinaties = 'mails@mail.net',
@body = 'teste dentro',
@subject = 'erro com proc',
@body_format = 'html',
@append_query_error = 1,
@profile_name = 'Profile de correio de banco de dados';Rollback Transaction Return End
Cometer transação
E eu recebo resultado como
MSG 50000, Nível 16, Estado 1, Linha 7
Isto é um teste
Mail na fila.
Solução
Você o rendeu para que nunca saiu, coloque o código de e -mail fora da transação
De livros on -line
Ao executar o SP_SEND_DBMAIL de dentro de uma transação existente, o Mail Mail depende do usuário para confirmar ou reverter quaisquer alterações. Não inicia uma transação interna.
Outras dicas
Você precisa criar um SavePoint, tentar sua operação, em caso de reversão de erros para o SalvePoint, enviar a mensagem de correio e se comprometer. Semelhante ao padrão descrito em Manuseio de exceção e transações aninhadas.