如果TreeMap
失败,我有一段使用TRY / CATCH来回滚事务的代码。但是,在代码中间,我有一段代码,每个循环发送一封电子邮件。
我遇到的问题是循环发送电子邮件然后插入。所以,假设经过9个过程/轮次,第10轮未能INSERT
;然后整个交易被回滚,但已经发送了9封电子邮件。如何改进它以便不首先发送电子邮件?或者如果交易失败,如何避免发送任何电子邮件?
以下是我的代码的简化版本,用于测试目的。
INSERT
答案 0 :(得分:3)
而不是在游标内部调用sp_send_dbmail
,而是可以将所需的所有元数据插入到队列表中,并且在游标完成后,如果没有问题,您可以运行另一个游标或循环只需发送队列表中每一行的电子邮件。
答案 1 :(得分:1)
问题是您缺少BEGIN TRAN
来启动交易。因此,您的语句都在单独的自动提交事务中运行,而不是一个组合事务。
如果您将BEGIN TRAN
添加到try块的开头,那么您现有的代码应该可以正常工作。