如果表具有多个FOR INSERT触发器,并且其中一个写入审核表,而另一个执行回滚,则是回滚了审核

让我们说一个表具有一个验证触发器,该触发器触发了一些业务逻辑:

Dim Files(1000) As String,i as long

If True Then
    Files(i) = "foo.pdf": i = i+1
End If

If True Then
    Files(i) = "bar.txt": i = i+1
End If

If True Then
    Files(i) = "baz.jpg": i = i+1
End If

redim preserve Files(i-1)

和一个审计触发器,该触发器将所有插入和更新写入另一个表。

TRG_MYTABLE_INSERT_UPDATE_VALIDATION
FOR INSERT,UPDATE on MYTABLE

并且不能保证它们将以特定的顺序执行,VALIDATION中的回滚会触发回滚到审计表的写入吗?

所有触发器是否都在“幕后”参与了同一笔交易?

monster0857 回答:如果表具有多个FOR INSERT触发器,并且其中一个写入审核表,而另一个执行回滚,则是回滚了审核

要回答有关触发器和事务的问题:是的,在与执行使触发器触发的语句的代码中被引用的代码相同的显式或隐式事务中,列出了触发器。

此外,在SQL Server触发器中,默认情况下在XACT_ABORT ON下运行触发器,这意味着如果触发器中发生错误,则会立即回滚 WHOLE 事务。

所以您的问题的答案是,如果两个触发器中的任何一个发生错误,整个事务都会回滚。

但是,您可以在事务代码中执行SET XACT_ABORT OFF,在这种情况下,回滚只会影响触发器中的操作。也就是说,无需其他,您的调用代码即可开始交易,并在触发器中明确执行ROLLBACK

以上就是为什么您应该非常小心地使用触发器的原因。

本文链接:https://www.f2er.com/3136992.html

大家都在问