是否可能在事务中防止触发器运行?

5
根据多个资源提供的资讯,比如这个,触发器中执行的查询会自动包含在一个事务中。如果在触发器代码中存在任何分布式查询,则该事务自动升级为分布式事务。简单来说,是否有办法防止这种行为?我正在寻求一种明确的方法以防止我的触发器代码在事务上下文中运行。

https://dev59.com/Q3VC5IYBdhLWcg3w0EsD - zloctb
2个回答

3
如果您想要执行异步操作,以便调用事务不必等待,您可以考虑使用Service Broker,它是专门设计用于执行异步任务并将控制权返回给调用方的。

另一个想法是不要让触发器执行工作,而是将工作项弹出到队列表中,并使后台进程持续运行以处理队列。如果您的工作项在inserted/deleted中的数据集上操作,则这并不容易做到,但在没有更多上下文的情况下,这似乎是一个可行的选择。

我不知道有没有办法防止触发器成为调用事务的一部分 - 实际上这正是整个问题的关键所在。


1
这被称为“自主事务”,最简单的实现方式是创建一个链接服务器来指向原始数据库。
请参阅此MSDN博客,了解可能的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接