отправить dbmail при ошибке @@ с sql server 2005

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

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

НАЧАТЬ СДЕЛКУ

ЗАЯВИТЬ @err int ЗАЯВИТЬ @test nvarchar (макс.)

RAISERROR ('Это тест', 16, 1) SELECT @err = @@ ERROR

ЕСЛИ @err ‹> 0 НАЧАТЬ

УСТАНОВИТЬ @test = error_message ()

EXEC msdb.dbo.sp_send_dbmail
@ recipients = '[email protected]',
@body = 'test inside',
@subject = 'Ошибка с процедурой',
@body_format = 'HTML',
@append_query_error = 1,
@profile_name = 'Профиль почты базы данных';

ОТКАТ СДЕЛКА ВОЗВРАТ КОНЕЦ

ЗАВЕРШИТЬ СДЕЛКУ

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

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


person Zeus    schedule 10.06.2010    source источник


Ответы (2)


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

Из книг в сети

При выполнении процедуры sp_send_dbmail из существующей транзакции Database Mail полагается на пользователя, который либо зафиксирует, либо откатит любые изменения. Он не запускает внутреннюю транзакцию.

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

person SQLMenace    schedule 10.06.2010
comment
хамм, это то, о чем я думал изначально ... однако я думал, что это будет похоже на оператор печати ... ну знаете ... стрелять и забывать что-то вроде вещи, потому что он выполняет процесс ... Я даже попытался, поместив почтовый код за пределами начала конца, но он все еще не работает .... - person Zeus; 10.06.2010

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

person Remus Rusanu    schedule 10.06.2010