отправить dbmail на @@ error с sql server 2005 - PullRequest
2 голосов
/ 10 июня 2010

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

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

НАЧАЛО СДЕЛКИ

ОБЪЯВИТЬ @err int ОБЪЯВИТЬ @test nvarchar (макс.)

RAISERROR ('Это тест', 16, 1) ВЫБРАТЬ @err= @@ ERROR

IF @err <> 0 BEGIN

SET @test = error_message ()

EXEC msdb.dbo.sp_send_dbmail@ receients = 'mail@mail.net',@body = 'тест внутри',@subject = 'Ошибка с proc',@body_format = 'HTML',@append_query_error = 1,@profile_name = 'База данных почтового профиля';

ROLLBACK TRANSACTION RETURN END

COMMIT TRANSACTION

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

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

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

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

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

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

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

0 голосов
/ 11 июня 2010

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

...