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
回滾TRAN T1將回滾一切,直到保存T1。回滾後提交t1將在保存t1之前提交所有內容 –