如果我在 MS SQL 中包含 Begin Transaction 和 commit transaction 之间的查询,如果我中止或停止执行查询会发生什么。执行 ROLLBACKED 期间所做的所有更改。
问问题
24210 次
3 回答
1
您的事务可以保持打开状态,直到您调用类似ROLLBACK TRANSACTION
or COMMIT TRANSACTION
,或者直到 SQL 对其采取一些操作。
更多信息:
在测试大型更新或更正时,我实际上喜欢利用这一点。你可以有这样的东西:
-- BEGIN TRANSACTION
-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION
/*
A bunch of SQL code here
*/
然后您可以突出显示/运行BEGIN TRANSACTION
,然后运行整个脚本。如果您对结果感到满意,您可以突出显示/运行COMMIT TRANSACTION
. 如果没有,请运行ROLLBACK TRANSACTION
. 由于这些行已被注释掉,它们不会影响您的整体事务,除非您明确突出显示并运行它们。
于 2013-06-26T14:06:24.123 回答
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
于 2013-06-26T14:05:57.840 回答
0
这取决于您的代码。只要您的事务存在,所有更改都将等待回滚或提交。
你可能想看看这个。
于 2013-06-26T14:04:25.100 回答