我想,当transaction.My设置内部发生错误dbo.sp_send_dbmail是正确发送数据库邮件,当我执行我做的PROC 1分钟内收到一封电子邮件。

然而,当我尝试使用dbo.sp_send_dbmail另一个proc中的事务中不是我不明白的电子邮件。 SQL Server会显示在结果窗口中的“邮件已排队”,但我从来没有收到。

  

BEGIN TRANSACTION

     

DECLARE @err INT   DECLARE @test为nvarchar(最大)

     

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

     

如果@err <> 0   BEGIN

     

SET @test = ERROR_MESSAGE()

     

EXEC msdb.dbo.sp_send_dbmail结果         @收件人= 'mail@mail.net',结果         @body =“测试”内,结果,         @subject = '用PROC错误',结果         @body_format = 'HTML',结果         @append_query_error = 1,结果         @profile_name =“数据库邮件资料”;结果

     

回滚事务    返回   END

     

COMMIT TRANSACTION

和我得到的结果作为

  

信息50000,级别16,状态1,行7,点击   这是一个测试结果   邮件排队。结果

有帮助吗?

解决方案

您滚回去,这样它从不出门,把电子邮件的代码事务之外

从上线书籍

  

当从执行sp_send_dbmail   现有的事务中,   数据库邮件依赖于用户   提交或回滚任何   变化。它不会启动内部   事务。

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

其他提示

您需要创建一个保存点,尝试你的操作,错误回滚的情况下保存点,然后发送的邮件提交。到图案相似于异常描述处理和嵌套的事务

scroll top