1

是否可以使用 SqlTransaction 类创建嵌套事务?如果是这样,我需要注意哪些规则/限制?

4

3 回答 3

3

不幸的是,SQL Server 忽略了内部事务的提交,如这篇 MSDN 文章中所述。

您可以嵌套事务,但请注意行为可能不是您所期望的。

在最外层事务提交之前,什么都不会提交。

那么,接下来...

transaction A
Query A

transaction B
Query B

Commit B
Rollback A

查询 B 的结果实际上并未提交给数据库。

于 2011-07-05T19:32:07.007 回答
1

您可以Save(string savePointName)在 SqlTransaction 类上使用方法。这将创建一个保存点,您可以在事务中回滚到该保存点。因此,如果您的部分代码失败,您将回滚到上一个保存点并重新开始。

例子:

SqlTransaction tran = _transaction as SqlTransaction;
tran.Save(savePointName);

当你失败时,你会做:

tran.Rollback(savePointName);

您可以根据需要多次执行此操作。这将解决您的嵌套事务问题。

于 2013-11-03T06:47:02.970 回答
0

是的,可以创建嵌套事务。

例如:

交易A
做行动#1
交易乙
做动作#2
交易C
行动#3

回滚事务 B
交易 D
做行动#4
提交事务 D
交易E
行动#5

提交事务 A

按照这个顺序,只有动作 1、4 和 5 会实际发生。除了我知道的事务本身的限制之外,嵌套事务没有任何限制。唯一必须理解的是,在提交“顶层”(嵌套的顶部)事务之前,实际上什么都没有提交。

于 2011-07-05T19:16:34.713 回答