enviar dbmail en @@ error de SQL Server 2005
-
26-09-2019 - |
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.
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.
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 .