Sql 更新表上的触发器
如果更新了表a,则会触发触发器。该触发器调用另一个SP进行一些处理。 如果SP失败,表A上发生的更新是否有可能恢复 如果是Sqlca.SqlCode,我在更新之后有一个代码,更新时总是有0Sql 更新表上的触发器,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中为触发器提供更具体的答案,那么您需要发布代码。是的,如果触发器在内部或通过调用某些外部过程遇到错误并回滚
请帮忙 触发器可以在执行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