【发布时间】:2016-02-09 13:58:40
【问题描述】:
我有 SQL Server 2008 并且想做这样的事务:
begin transaction oo;
......
begin try
save transaction xx;
alter table ....; -- this will fail
alter table ....;
alter table ....;
end try
begin catch
rollback transaction xx; -- error here
end catch;
......
commit transaction oo;
rollback transaction xx;,我收到消息
3931 当前事务无法提交,也无法回滚到保存点。回滚整个事务。
我在这里做错了什么?
更新解释场景:
有一个大事务“oo”,它将数据库的表结构从产品版本X更改为产品版本Y。
在嵌套事务中,应尝试更改用户特定表(= 内部事务)。
如果用户特定表因某种原因损坏,则不应回滚整个产品升级过程。
另一方面,如果在主产品表升级(外部事务)期间出现其他故障,则不应升级用户特定表。
【问题讨论】:
-
你从哪里开始交易 xx?
-
嵌套事务是一个神话。您可以做一些可以模仿嵌套事务的事情,但最好接受它们不存在并重新考虑您的流程。有数百页解释了嵌套事务的神话。这是其中的几个。 sqlskills.com/blogs/paul/…sqlwithmanoj.com/2015/05/26/…
标签: sql sql-server transactions