Sql 是否需要回滚事务语句

Sql 是否需要回滚事务语句,sql,sql-server,transactions,Sql,Sql Server,Transactions,如果发生故障,打开显式事务时,BEGIN和COMMIT之间的所有语句是否都会自动回滚?或者您必须发出回滚语句 在我以前的经验中,从开始到提交之间的所有操作都会自动回滚。因此,当您需要发出ROLLBACK语句以手动回滚时,将由什么组成?这取决于您的会话设置和错误类型。如果是语句终止错误,则事务将继续执行下一个语句。如果是批处理终止错误,则事务中止 为避免语句终止错误问题,请确保您以前执行过: SET XACT_ABORT ON; 然后,所有语句终止错误也将中止事务并回滚 一些编程客户端库会自动

如果发生故障,打开显式事务时,BEGIN和COMMIT之间的所有语句是否都会自动回滚?或者您必须发出回滚语句


在我以前的经验中,从开始到提交之间的所有操作都会自动回滚。因此,当您需要发出ROLLBACK语句以手动回滚时,将由什么组成?

这取决于您的会话设置和错误类型。如果是语句终止错误,则事务将继续执行下一个语句。如果是批处理终止错误,则事务中止

为避免语句终止错误问题,请确保您以前执行过:

SET XACT_ABORT ON; 
然后,所有语句终止错误也将中止事务并回滚


一些编程客户端库会自动为您启用该功能,这就是为什么您以前可能看到过自动回滚,但我通常会将其添加为所有存储过程的第一行,以确保这一点。

您应该手动执行回滚。否则,您的事务可能会锁定表,这可能导致死锁。从代码编写规程的角度来看,这是一件好事。您不会放弃隐含的控制权,而是将其保留在您贪婪的手中。但是,当使用BEGIN/COMMIT事务时,情况会怎样呢。如果出现错误,整个事务是否回滚?否。正如我提到的,这取决于错误的类型。有些人将在下一次发言中继续发言。将XACT_ABORT设置为ON会使所有错误中止。有些客户端库为您的会话启用此功能,但不是全部。