从sql server 2005发送@@ error错误的dbmail

时间:2010-06-10 19:42:23

标签: sql sql-server sql-server-2005 sp-send-dbmail dbmail

我正在尝试在事务内部发生错误时发送数据库邮件。我对dbo.sp_send_dbmail的设置是正确的,当我执行proc时,我会在1分钟内收到一封电子邮件。

然而,当我尝试在事务中的另一个proc中使用dbo.sp_send_dbmail时,我没有收到电子邮件。 Sql server确实在结果窗口中显示“Mail quued”但我从未收到过它。

  

BEGIN TRANSACTION

     

DECLARE @err int   DECLARE @test nvarchar(max)

     

RAISERROR('这是一个测试',16,1)   SELECT @err = @@ ERROR

     

IF @err<> 0   BEGIN

     

SET @test = error_message()

     

EXEC msdb.dbo.sp_send_dbmail
        @ recipients ='mail@mail.net',
        @body ='test inside',
        @subject ='proc'错误,
        @body_format ='HTML',
        @append_query_error = 1,
        @profile_name ='数据库邮件配置文件';

     

ROLLBACK TRANSACTION    返回   结束

     

COMMIT TRANSACTION

我得到结果

  

Msg 50000,Level 16,State 1,Line 7
  这是一个测试   邮件排队。

2 个答案:

答案 0 :(得分:3)

您将其回滚,以便它永远不会消失,将电子邮件代码放在交易之外

来自在线图书

  

从中执行sp_send_dbmail时   在现有交易中,   数据库邮件依赖于用户   提交或回滚任何   变化。它没有开始内心   事务。

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

答案 1 :(得分:0)

您需要创建一个保存点,尝试操作,如果错误回滚到保存点,则发送邮件然后提交。与Exception handling and nested transactions中描述的模式类似。