当事务内发生错误时,我尝试发送数据库邮件。我的 dbo.sp_send_dbmail 设置是正确的,当我执行该过程时,我确实在 1 分钟内收到一封电子邮件。
但是,当我尝试在事务中的另一个过程中使用 dbo.sp_send_dbmail 时,我没有收到电子邮件。 Sql 服务器确实在结果窗口中显示“邮件已排队”,但我从未收到它。
BEGIN TRANSACTION
DECLARE @err int DECLARE @test nvarchar(max)
RAISERROR('This is a test', 16, 1) SELECT @err = @@ERROR
IF @err <> 0 BEGIN
SET @test = error_message()
EXEC msdb.dbo.sp_send_dbmail
@recipients= '[email protected]',
@body = 'test inside',
@subject = 'Error with proc',
@body_format = 'HTML',
@append_query_error = 1,
@profile_name ='Database Mail Profile';ROLLBACK TRANSACTION RETURN END
COMMIT TRANSACTION
我得到的结果是
Msg 50000, Level 16, State 1, Line 7
This is a test
Mail queued.
最佳答案
您将其回滚,使其永远不会消失,将电子邮件代码放在交易之外
摘自在线书籍
When executing sp_send_dbmail from within an existing transaction, Database Mail relies on the user to either commit or roll back any changes. It does not start an inner transaction.
关于sql - 从 sql server 2005 发送关于 @@error 的 dbmail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3017857/