在MS SQL中开始事务和提交事务



如果我在MS SQL中的Begin Transaction和commit Transaction之间封装了一个查询,那么如果我中止或停止执行该查询会发生什么。执行ROLLBACKED过程中所做的所有更改都会发生吗。?

您的事务可以保持打开状态,直到您调用类似ROLLBACK TRANSACTIONCOMMIT TRANSACTION的东西,或者直到SQL对此采取一些操作。

更多信息:

  • SQL Server和事务过程中的连接丢失
  • 当连接关闭时,未提交的事务会发生什么
  • 如果你不这样做会发生什么;t在数据库中提交事务(例如SQL Server)

事实上,我喜欢在测试大型更新或更正时利用这一点。你可以有这样的东西:

-- BEGIN TRANSACTION
-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION
/*
    A bunch of SQL code here
*/

然后您可以高亮显示/运行BEGIN TRANSACTION,然后运行整个脚本。如果您对结果感到满意,可以突出显示/运行COMMIT TRANSACTION。如果没有,请运行ROLLBACK TRANSACTION。由于这些行被注释掉了,除非您明确高亮显示并运行它们,否则它们不会影响您的整体事务。

这取决于您的代码。只要事务存在,所有更改都将挂起回滚或提交。

你可能想看看这个。

否。事务仍将处于活动状态-您根本没有回滚,是吗?:)运行此示例,看看会发生什么。若在事务处理期间中断,则会看到值2在表中,但必须回滚或提交。

select 1 as x into #xxx 
GO

begin transaction
    insert into #xxx(x) select 2
    -- ctrl+break before time runs out.
    waitfor delay '00:00:10'
commit transaction

-- now try this:
select * from #xxx
rollback transaction
select * from #xxx

最新更新