SQL Server:如果事务回滚,请不要发送电子邮件

时间:2017-07-24 18:43:24

标签: sql-server

如果TreeMap失败,我有一段使用TRY / CATCH来回滚事务的代码。但是,在代码中间,我有一段代码,每个循环发送一封电子邮件。

我遇到的问题是循环发送电子邮件然后插入。所以,假设经过9个过程/轮次,第10轮未能INSERT;然后整个交易被回滚,但已经发送了9封电子邮件。如何改进它以便不首先发送电子邮件?或者如果交易失败,如何避免发送任何电子邮件?

以下是我的代码的简化版本,用于测试目的。

INSERT

2 个答案:

答案 0 :(得分:3)

而不是在游标内部调用sp_send_dbmail,而是可以将所需的所有元数据插入到队列表中,并且在游标完成后,如果没有问题,您可以运行另一个游标或循环只需发送队列表中每一行的电子邮件。

答案 1 :(得分:1)

问题是您缺少BEGIN TRAN来启动交易。因此,您的语句都在单独的自动提交事务中运行,而不是一个组合事务。

如果您将BEGIN TRAN添加到try块的开头,那么您现有的代码应该可以正常工作。