是否可以使用 SqlTransaction 类创建嵌套事务?如果是这样,我需要注意哪些规则/限制?
问问题
1364 次
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 回答