如果我在MS SQL中将一个查询封闭在Begin Transaction和commit transaction之间,如果我中止或停止该查询的执行,会发生什么情况?在执行ROLLBACKED.期间所做的所有更改都会被取消吗?
发布于 2013-06-26 22:04:25
这取决于您的代码。只要您的事务存在,所有更改都将等待回滚或提交。
你可能想看看this。
发布于 2013-06-26 22:06:24
您的事务可以保持打开状态,直到您调用诸如ROLLBACK TRANSACTION或COMMIT TRANSACTION之类的东西,或者直到SQL对其采取某些操作。
更多信息:
实际上,我喜欢在测试大型更新或更正时利用这一点。你可以拥有这样的东西:
-- BEGIN TRANSACTION
-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION
/*
A bunch of SQL code here
*/然后,您可以突出显示/运行BEGIN TRANSACTION,然后运行整个脚本。如果您对结果感到满意,您可以突出显示/运行COMMIT TRANSACTION。如果没有,请运行ROLLBACK TRANSACTION。因为这些行被注释掉了,所以它们不会影响整个事务,除非您显式地突出显示并运行它们。
发布于 2013-06-26 22:05:58
不是的。事务仍将处于活动状态--您毕竟没有回滚,是不是?:)运行此示例,看看会发生什么。如果您在事务期间中断,您将看到值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 #xxxhttps://stackoverflow.com/questions/17322178
复制相似问题