我把你的insert语句全部替换成print,得到的结果是你希望值,应该是insert本身就是一个自动提交的事务的原因。ALTER procedure test_pro as begin --insert into TestValue 这个相当于记录@@TRANCOUNT的值,我用print在查询分析器里看不到。 PRINT @@TRANCOUNT --这里还没开始@@TRANCOUNT应该是0,实际结果是2 begin transaction PRINT @@TRANCOUNT
create procedure test_pro as begin declare @int int set @int = @@TRANCOUNT --insert into TestValue 这个相当于记录@@TRANCOUNT的值,我用print在查询分析器里看不到。 insert into testvalue values(@int,'1') --这里还没开始@@TRANCOUNT应该是0,实际结果是2begin transaction set @int = @@TRANCOUNT insert into testvalue values(@int,'2') --这里事务刚开始@@TRANCOUNT应该是1,实际结果是2 set @int = @@TRANCOUNT insert into testvalue values(@int,'3') --这里@@TRANCOUNT应该还是1,实际结果是2 rollback transaction set @int = @@TRANCOUNT insert into testvalue values(@int,'4') --这里回滚了,@@TRANCOUNT应该由1变为0了,实际结果还是2 end提一下如果你想记录@@trancount的值保存在本地变量里面使用,不能用在INSERT的插入里面,因为INSERT也是事物,会导致trancount数值不准。
as
begin
--insert into TestValue 这个相当于记录@@TRANCOUNT的值,我用print在查询分析器里看不到。
PRINT @@TRANCOUNT --这里还没开始@@TRANCOUNT应该是0,实际结果是2
begin transaction
PRINT @@TRANCOUNT
PRINT @@TRANCOUNT --这里@@TRANCOUNT应该还是1,实际结果是2
rollback transaction
PRINT @@TRANCOUNT --这里回滚了,@@TRANCOUNT应该由1变为0了,实际结果还是2
END
EXEC test_pro
/*
0
1
1
0*/
as
begin
declare @int int
set @int = @@TRANCOUNT
--insert into TestValue 这个相当于记录@@TRANCOUNT的值,我用print在查询分析器里看不到。
insert into testvalue values(@int,'1') --这里还没开始@@TRANCOUNT应该是0,实际结果是2begin transaction
set @int = @@TRANCOUNT
insert into testvalue values(@int,'2') --这里事务刚开始@@TRANCOUNT应该是1,实际结果是2
set @int = @@TRANCOUNT
insert into testvalue values(@int,'3') --这里@@TRANCOUNT应该还是1,实际结果是2
rollback transaction
set @int = @@TRANCOUNT
insert into testvalue values(@int,'4') --这里回滚了,@@TRANCOUNT应该由1变为0了,实际结果还是2
end提一下如果你想记录@@trancount的值保存在本地变量里面使用,不能用在INSERT的插入里面,因为INSERT也是事物,会导致trancount数值不准。