如果我在MS SQL中的Begin Transaction和commit Transaction之间封装了一个查询,那么如果我中止或停止执行该查询会发生什么。执行ROLLBACKED过程中所做的所有更改都会发生吗。?
您的事务可以保持打开状态,直到您调用类似ROLLBACK TRANSACTION
或COMMIT 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