2011-07-05 63 views

回答

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將已經實際發生的行爲。嵌套事務除了我自己知道的事務本身的限制之外沒有任何限制。唯一必須理解的是,在「頂層」(嵌套頂部)事務提交之前,沒有任何事情是真正承諾的。

1

不幸的是SQL Server忽略提交的內部事務,as in this MSDN article.

您可以嵌套事務,但要注意此行爲可能不是你所期望的。

直到最外層的事務提交時纔會提交。

因此,在下面......

transaction A 
Query A 

transaction B 
Query B 

Commit B 
Rollback A 

查詢B的結果是不實際提交到數據庫。

+0

這實際上是我想要的行爲,但是如何使用SqlTransaction類來表達它? –

1

您可以在SqlTransaction類上使用Save(string savePointName)方法。這將創建一個可以在事務內部回滾的保存點。因此,如果部分代碼失敗,您將回滾到上一個保存點並重新開始。

例子:

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

,當你失敗了,你會做什麼:

tran.Rollback(savePointName); 

你可以做你想做這個多次。這將解決您嵌套事務的問題。