2015-04-23 62 views
1

我有三個問題。保存事務時沒有發生回滾

首先有人可以告訴我爲什麼節約交易回滾沒有發生。在try..Catch語句的第二個塊中刪除#t2後,我輸入了錯誤1/0。

二如果例如步驟T1調用過程T2並且在T2過程的錯誤將外部事務來的情況下,甚至完全回滾我使用XACT_ABORT off.Can我提交事務。

我的第三個問題是,它可以只提交保存交易,而不是整個交易。

if exists(select * from tempdb.INFORMATION_SCHEMA.tables where TABLE_NAME like '%#T1%') 
begin 
    drop table #t1 
    drop table #t2 
    drop table #t3 
    drop table #t4 
    drop table #t5 
end 

CREATE TABLE #T1(C int); 
CREATE TABLE #T2(C int); 
CREATE TABLE #T3(C int); 
CREATE TABLE #T4(C int); 
CREATE TABLE #T5(C int); 

INSERT INTO #T1 SELECT 1; 
INSERT INTO #T2 SELECT 1; 
INSERT INTO #T3 SELECT 1; 
INSERT INTO #T4 SELECT 1; 
INSERT INTO #T5 SELECT 1; 
begin transaction 

begin try 
delete #t1 
    --step 1 
end try 

begin catch 
rollback transaction 
end catch 

if @@ERROR = 0 
begin 
save transaction t1 
end 

begin try 
delete #t2  ---step 2 
select 1/0 
end try 

begin catch 
rollback transaction t1 
commit transaction 
end catch 
+0

回滾TRAN T1將回滾一切,直到保存T1。回滾後提交t1將在保存t1之前提交所有內容 –

回答

0

我可以弄清楚爲什麼回滾爲T1的交易看上去就像是沒有發生那是因爲我刪除表#t1之後節約交易,因此它是顯示了不節約交易做工精細空values.its的原因。由於