Sql 更新表上的触发器

Sql 更新表上的触发器,sql,sql-server-2008,stored-procedures,triggers,informix,Sql,Sql Server 2008,Stored Procedures,Triggers,Informix,如果更新了表a,则会触发触发器。该触发器调用另一个SP进行一些处理。 如果SP失败,表A上发生的更新是否有可能恢复 如果是Sqlca.SqlCode,我在更新之后有一个代码,更新时总是有0 请帮忙 触发器可以在执行DML后执行操作,而不是执行DML等。因此,是的,如果SP出现故障,更新DML可能不会发生-这取决于您如何编写它/使用什么功能 请在此处仔细阅读触发器: 如果您想在quesiton中为触发器提供更具体的答案,那么您需要发布代码。是的,如果触发器在内部或通过调用某些外部过程遇到错误并回滚

如果更新了表a,则会触发触发器。该触发器调用另一个SP进行一些处理。 如果SP失败,表A上发生的更新是否有可能恢复

如果是Sqlca.SqlCode,我在更新之后有一个代码,更新时总是有0


请帮忙

触发器可以在执行DML后执行操作,而不是执行DML等。因此,是的,如果SP出现故障,更新DML可能不会发生-这取决于您如何编写它/使用什么功能

请在此处仔细阅读触发器:


如果您想在quesiton中为触发器提供更具体的答案,那么您需要发布代码。

是的,如果触发器在内部或通过调用某些外部过程遇到错误并回滚事务,它将回滚整个事务,包括导致触发器首先触发的任何更新。如果这不是您想要的行为,有多种方法可以避免:

使用TRY/CATCH吸收来自外部过程的任何错误,或者将过程逻辑移到触发器中,或者向存储过程添加适当的错误处理,这样,如果您不在乎那里发生了错误,它就不会冒泡并回滚所有内容

使用INSTEAD OF触发器-与TRY/CATCH结合使用,或者可能先提交您自己的更新,您应该能够更新表,而不必关心外部存储过程是否失败

替代触发器的示例:

结果:

Msg 8134,16级,状态1,程序oh_my 遇到被零除的错误。 声明已终止

然而,SELECT显示,即使触发器中发生了错误,它也发生在提交更新之后——因此与未进行正确错误处理的after触发器中发生的异常不同,我们能够防止错误回滚我们所做的所有工作

id    name
----  -----
1     Frank
id    name
----  -----
1     Frank