如果我在MS SQL中包含Begin Transaction和commit transaction之间的查询,如果我中止或停止执行查询会发生什么。是否会在执行ROLLBACKED期间完成所有更改。
答案 0 :(得分:1)
您的交易可以保持打开状态,直到您拨打ROLLBACK TRANSACTION
或COMMIT TRANSACTION
之类的内容,或直到SQL对其执行某些操作为止。
更多信息:
我实际上喜欢在测试大量更新或更正时利用这一点。你可以这样:
-- BEGIN TRANSACTION
-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION
/*
A bunch of SQL code here
*/
然后你可以突出显示/运行BEGIN TRANSACTION
,然后运行整个脚本。如果您对结果感到满意,可以突出显示/运行COMMIT TRANSACTION
。如果没有,请运行ROLLBACK TRANSACTION
。由于这些行被注释掉了,除非您明确地突出显示并运行它们,否则它们不会影响您的整体交易。
答案 1 :(得分:0)
这取决于您的代码。只要您的事务存在,所有更改都将等待回滚或提交。
您可能需要查看this。
答案 2 :(得分:0)
没有。交易仍然有效 - 毕竟你没有回滚,是吗? :) 运行此示例,看看会发生什么。如果在事务期间中断,您将看到值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