save事件没有发生回滚

时间:2015-04-23 07:30:06

标签: sql-server-2008

我有三个问题。

首先,有人可以告诉我为什么没有发生保存事务的回滚。在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

1 个答案:

答案 0 :(得分:0)

我可以弄清楚为什么t1事务的回滚看起来没有发生的原因是因为我在删除表#t1之后保存了事务,所以它显示了null值。没有保存事务就可以正常工作。感谢