Pregunta

Estoy intentando enviar correo base de datos cuando se produce un error dentro de la configuración de transaction.My dbo.sp_send_dbmail es correcta, cuando ejecuto el proc hago llegar un correo electrónico dentro de 1 min.

Sin embargo, cuando intento utilizar dbo.sp_send_dbmail dentro de otro proc dentro de las transacciones que no recibo el correo electrónico. sql server sí muestra en la ventana de resultados que "el correo en cola" pero nunca reciben.

  

BEGIN TRANSACTION

     

DECLARE @err int   DECLARE nvarchar @test (max)

     

RAISERROR ( 'Esta es una prueba', 16, 1)   @err SELECT = @@ ERROR

     

IF @err <> 0   COMENZAR

     

SET @test = mensaje_error ()

     

EXEC msdb.dbo.sp_send_dbmail
        @ Destinatarios = 'mail@mail.net',
        @body = 'dentro de la prueba',
        @subject = 'Error con proc',
        @body_format = 'HTML',
        @append_query_error = 1,
        @profile_name = 'Base de datos de perfil de correo';

     

ROLLBACK TRANSACTION    REGRESO   FIN

     

COMMIT TRANSACTION

Y consigo resultado como

  

Msg 50000, nivel 16, estado 1, línea 7
  Esta es una prueba
  Correo en cola.

¿Fue útil?

Solución

Se puso de nuevo por lo que nunca se apagó, poner el código de correo electrónico fuera de la transacción

A partir de los libros en línea

  

Al ejecutar sp_send_dbmail de   dentro de una transacción existente,   Correo electrónico de base depende de que el usuario   o bien confirmar o la espalda rodillo cualquier   cambia. No se inicia un interior   transacción.

http://msdn.microsoft.com/en-us/library /ms190307.aspx

Otros consejos

Se necesita crear un punto de salvaguarda, el intento de su operación, en caso de reversión de error en el punto de salvaguarda, enviar el mensaje de correo electrónico a continuación cometió. Similar al patrón descrito en Excepción manipulación y transacciones anidadas .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top