我有三个问题。
首先,有人可以告诉我为什么没有发生保存事务的回滚。在Try..Catch语句的第二个块中删除#t2后输入了错误1/0。
第二,如果例如过程T1调用过程T2并且T2过程中存在错误,则外部事务将完全回滚,即使我使用Xact_Abort off。也可以提交事务。
我的第三个问题是可能只提交保存事务而不是整个事务。
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 :(得分:0)
我可以弄清楚为什么t1事务的回滚看起来没有发生的原因是因为我在删除表#t1之后保存了事务,所以它显示了null值。没有保存事务就可以正常工作。感谢