是否可以使用SqlTransaction类创建嵌套事务?如果是这样,我需要注意哪些规则/限制?
答案 0 :(得分:2)
不幸的是,SQL Server忽略了内部事务的提交as in this MSDN article.
您可以嵌套交易,但请注意,行为可能与您的预期不符。
在最外面的事务提交之前没有任何提交。
所以,在下面......
transaction A
Query A
transaction B
Query B
Commit B
Rollback A
查询B的结果实际上没有提交给数据库。
答案 1 :(得分:1)
您可以在SqlTransaction类上使用Save(string savePointName)
方法。这将创建一个保存点,您可以在该保存点内回滚事务。因此,如果部分代码失败,您将回滚到上一个保存点并重新开始。
示例:
SqlTransaction tran = _transaction as SqlTransaction;
tran.Save(savePointName);
当你失败时,你会做:
tran.Rollback(savePointName);
您可以多次执行此操作。这将解决您的嵌套事务问题。
答案 2 :(得分:0)
是的,可以创建嵌套事务。
例如:
transaction A do action #1 transaction B do action #2 transaction C do action #3 rollback transaction B transaction D do action #4 commit transaction D transaction E do action #5 commit transaction A
使用此序列,实际上只会发生操作1,4和5。除了我所知道的事务限制之外,嵌套事务没有任何限制。唯一必须理解的是,在提交“顶级”(嵌套顶部)事务之前,实际上没有任何内容被提交。