在打开显式事务时如果发生故障,是否会自动回退BEGIN和COMMIT之间的所有语句?还是您必须发出ROLLBACK语句。
根据我以前的经验,BEGIN和COMMIT之间的所有内容都会自动回滚。因此,当您需要发出ROLLBACK语句以手动将其回滚时,会构成什么?
答案 0 :(得分:0)
这取决于您的会话设置和错误类型。如果是语句终止错误,则事务将继续执行下一条语句。如果是批次终止错误,则事务中止。
为避免语句终止错误出现问题,请确保您先前已执行:
SET XACT_ABORT ON;
,然后所有终止语句的错误也将中止事务并回滚。
某些编程客户端库会自动为您打开该功能,这就是为什么您以前可能会看到自动回滚的原因,但是为了确定起见,我通常将其添加到所有存储过程的第一行。