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

时间:2012-09-17 17:56:56

标签: sql sql-server sql-server-2008

根据多个资源,例如this

  

在触发器的上下文中执行的查询会自动包装在事务中。如果触发器代码中存在任何分布式查询,则事务将自动提升为分布式事务。

简单的问题 - 有没有办法防止这种行为?我正在寻找一种方法来明确地阻止我的触发器中的代码在事务的上下文中运行。

2 个答案:

答案 0 :(得分:3)

如果您尝试执行某些异步操作以便调用事务不必等待,您可以考虑Service Broker,这样做的目的就是完成 - 触发一些异步任务,然后返回控制无论事务范围如何,都给调用者。

另一个想法是不让你的触发器执行工作,而是将工作项弹出到队列表上,并让后台进程连续运行以处理队列。如果您的工作项对inserted / deleted中的数据集进行操作,则这不一定容易,但如果没有更多上下文,它肯定是一个可行的选项。

我不知道如何防止触发器成为调用事务的一部分 - 实际上这就是重点。

答案 1 :(得分:1)

这称为“自治事务”,最简单的实现方法是创建一个链接服务器以指向原始数据库。

请参阅this MSDN blog了解可能的解决方案。