首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL中begin transaction和commit transaction

MS SQL中begin transaction和commit transaction
EN

Stack Overflow用户
提问于 2013-06-26 21:59:06
回答 3查看 24.1K关注 0票数 0

如果我在MS SQL中将一个查询封闭在Begin Transaction和commit transaction之间,如果我中止或停止该查询的执行,会发生什么情况?在执行ROLLBACKED.期间所做的所有更改都会被取消吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-26 22:04:25

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

你可能想看看this

票数 0
EN

Stack Overflow用户

发布于 2013-06-26 22:06:24

您的事务可以保持打开状态,直到您调用诸如ROLLBACK TRANSACTIONCOMMIT TRANSACTION之类的东西,或者直到SQL对其采取某些操作。

更多信息:

实际上,我喜欢在测试大型更新或更正时利用这一点。你可以拥有这样的东西:

代码语言:javascript
复制
-- BEGIN TRANSACTION
-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION

/*
    A bunch of SQL code here
*/

然后,您可以突出显示/运行BEGIN TRANSACTION,然后运行整个脚本。如果您对结果感到满意,您可以突出显示/运行COMMIT TRANSACTION。如果没有,请运行ROLLBACK TRANSACTION。因为这些行被注释掉了,所以它们不会影响整个事务,除非您显式地突出显示并运行它们。

票数 1
EN

Stack Overflow用户

发布于 2013-06-26 22:05:58

不是的。事务仍将处于活动状态--您毕竟没有回滚,是不是?:)运行此示例,看看会发生什么。如果您在事务期间中断,您将看到值2在一个表中,但是您必须回滚或提交。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17322178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档