sql - 从 sql server 2005 发送关于 @@error 的 dbmail

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

当事务内发生错误时,我尝试发送数据库邮件。我的 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.

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

关于sql - 从 sql server 2005 发送关于 @@error 的 dbmail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3017857/

相关文章:

mysql - 使用一张表连接三张表

php - SQL 解析错误 "on duplicate key update"

sql - 如何使用 T-SQL 使用分隔符字符分割字符串?

sql - 单独的逗号分隔值并存储在sql server的表中

mysql - 如何从使用用户变量作为计数器的查询中获得正确的结果?

python - 从Python代码中获取列表索引超出范围

sql-server - 如何使用 JDBC 驱动程序的集成安全性连接到 SQL Server?

sql - COUNT() 函数与 NOT IN 子句结合使用 varchar 字段无法正常工作 (T-SQL)

sql-server - T-SQL : what COLUMNS have changed after an update?

sql-server-2005 - 如何使用跨多个服务器链接的过程的事务?