2013-06-26 49 views
0

如果我在MS SQL中的Begin Transaction和Commit事务之间附上查询,如果我中止或停止查询的执行,会发生什么情况。将执行ROLLBACKED期间所做的所有更改。?在MS SQL中开始事务并提交事务

回答

0

这取决于你的代码。只要您的事务存在,所有更改都将等待回滚或提交。您可能要查看this

0

编号交易将仍然有效 - 你没有回滚,是吗? :) 运行这个例子,看看会发生什么。如果您在事务中断时,您会看到值2在表中,但您必须回滚或提交。直到调用类似ROLLBACK TRANSACTIONCOMMIT TRANSACTION

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 
1

您的交易可以保持打开,或直到SQL需要它的一些行动。

更多信息:

其实我喜欢大测试更新或更正时,利用这一优势。你可以有这样的事情:

-- BEGIN TRANSACTION 
-- ROLLBACK TRANSACTION 
-- COMMIT TRANSACTION 

/* 
    A bunch of SQL code here 
*/ 

然后你就可以突出显示/运行BEGIN TRANSACTION,然后运行整个脚本。如果您对结果满意,您可以突出显示/运行COMMIT TRANSACTION。如果没有,运行ROLLBACK TRANSACTION。由于这些行被注释掉了,除非您明确突出显示并运行它们,否则它们不会影响整个事务。