根据几个资源,例如this,
在触发器上下文中执行的查询会自动包装在事务中。如果触发代码中有任何分布式查询,事务会自动提升为分布式事务。
简单的问题 - 有没有办法防止这种行为?我正在寻找一种方法来显式阻止触发器中的代码在事务上下文中运行。
根据几个资源,例如this,
在触发器上下文中执行的查询会自动包装在事务中。如果触发代码中有任何分布式查询,事务会自动提升为分布式事务。
简单的问题 - 有没有办法防止这种行为?我正在寻找一种方法来显式阻止触发器中的代码在事务上下文中运行。
如果您尝试执行异步操作以便调用事务不必等待,您可以考虑Service Broker,它的设计目的就是为了做到这一点 - 触发一些异步任务,并将控制权返回给调用者,而不管交易范围。
另一个想法是不让触发器执行工作,而是将工作项弹出到队列表中,并让后台进程连续运行来处理队列。inserted
如果您的工作项对/中的数据集进行操作,这不一定很容易做到,deleted
但如果没有更多上下文,这似乎是一个可行的选择。
我不知道有什么方法可以防止触发器成为调用事务的一部分——事实上这就是重点。
这称为“自治事务”,最简单的实现方式是创建链接服务器以指向原始数据库。
有关可能的解决方案,请参阅此 MSDN 博客。