SQL Server 中是按批次还是按会话进行隐式事务?

Nei*_*l P 4 sql-server t-sql transaction

想象一下,我正在通过管理工作室运行多个批次,由 GO 命令分隔。我想知道隐式事务的行为方式 - 事务是按批次提交还是在整个执行过程中提交一次。

Sol*_*zky 6

您所说的“隐式交易”究竟是什么意思?您的意思是您启用了IMPLICIT_TRANSACTIONS的会话属性并且正在使用该功能?或者你的意思是你只是没有指定BEGIN TRANSACTION?(即创建“显式”交易)?

如果您的意思是该IMPLICIT_TRANSACTIONS功能,那只会发出该功能,仅此BEGIN TRAN而已。所以,无论是否使用IMPLICIT_TRANSACTIONS发出BEGIN TRAN或者如果你正在做的是明确自己的,你仍然负责发放COMMITROLLBACK。是的,事务可以跨批次,无论您是使用GO分隔批次还是通过F5在不同时间点击来执行多个查询。

在任何一种情况下——IMPLICIT_TRANSACTIONS设置为ON或显式BEGIN TRAN语句——都不会自动提交。在这两种情况下,唯一可能是自动的事情是ROLLBACK如果您关闭连接而不先发出COMMITROLLBACK

如果没有IMPLICIT_TRANSACTIONSset toON或显式BEGIN TRAN语句,那么每个单独的查询都是它自己的事务,即“自动提交”,您无需担心。意思是,2 个独立的INSERT语句是两个完全独立的事务。