Вопрос

Я пытаюсь отправить почту базы данных, когда возникает ошибка в транзакции. My Setup для dbo.sp_send_dbmail верна, когда я выполняю proc, который я получаю письмо в течение 1 мин.

Однако, когда я пытаюсь использовать dbo.sp_send_dbmail внутри другого proc в пределах транзакций, чем я не получаю письмо. SQL Server показывает в окне результатов, который «поступил на почту», но я никогда не получаю его.

Начать транзакцию

DECLARE @ERR INT DECLARE @Test Nvarchar (Макс)

RaisError («Это тест», 16, 1) Выберите @err = @@ ошибку

Если @err <> 0 начнется

Set @test = error_message ()

Exec msdb.dbo.sp_send_dbmail.
@ Получатели = 'mail@mail.net',
@body = 'test внутри ",
@subject = 'Ошибка с proc',
@body_format = 'html',
@append_query_error = 1,
@profile_name = 'База данных почтовый профиль';

Отказ от операции возврата

Совершать транзакцию

И я получаю результат как

MSG 50000, Уровень 16, Состояние 1, Линия 7
Это проверка
Почтовая по почте.

Это было полезно?

Решение

Вы бросили его обратно, чтобы он никогда не выходил, поставил код электронной почты за пределы транзакции

Из книг на линии

При выполнении SP_SEND_DBMail из существующей транзакции почта базы данных опирается на пользователь, чтобы либо совершить или откатывать любые изменения. Это не начинает внутреннюю транзакцию.

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

Другие советы

Вам необходимо создать SavePoint, попробуйте вашу работу, в случае отката ошибок к SavePoint, отправьте почтовое сообщение, а затем совершить. Похож на рисунок, описанный в Обработка исключений и вложенные транзакции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top