0

如果我在 MS SQL 中包含 Begin Transaction 和 commit transaction 之间的查询,如果我中止或停止执行查询会发生什么。执行 ROLLBACKED 期间所做的所有更改。

4

3 回答 3

1

您的事务可以保持打开状态,直到您调用类似ROLLBACK TRANSACTIONor 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 回答