在MS SQL中开始事务和提交事务

时间:2013-06-26 13:59:06

标签: sql-server

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

3 个答案:

答案 0 :(得分:1)

您的交易可以保持打开状态,直到您拨打ROLLBACK TRANSACTIONCOMMIT 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