事务中@@TRANCOUNT值的疑问?
本帖最后由 yilin54 于 2014-01-12 16:16:33 编辑 看文章说@@TRANCOUNT的初始值为0,begin transaction 后+1, commit transaction 后变为0。我测试了发现每个位置@@TRANCOUNT的值都是2.这是为什么啊?
create procedure test_pro
as
begin
--insert into TestValue 这个相当于记录@@TRANCOUNT的值,我用print在查询分析器里看不到。
insert into TestValue values(@@TRANCOUNT,'1') --这里还没开始@@TRANCOUNT应该是0,实际结果是2
begin transaction
insert into TestValue values(@@TRANCOUNT,'2') --这里事务刚开始@@TRANCOUNT应该是1,实际结果是2
insert into Student values('998888','小马哥','国际贸易','99086')
insert into TestValue values(@@TRANCOUNT,'3') --这里@@TRANCOUNT应该还是1,实际结果是2
rollback transaction
insert into TestValue values(@@TRANCOUNT,'4') --这里回滚了,@@TRANCOUNT应该由1变为0了,实际结果还是2
end
create procedure test_pro
as
begin
insert into TestValue values(@@TRANCOUNT,'1') --这里还没开始@@TRANCOUNT应该是0,实际结果是2
begin transaction
insert into TestValue values(@@TRANCOUNT,'2') --这里事务刚开始@@TRANCOUNT应该是1,实际结果是2
insert into Student values('998888','小马哥','国际贸易','99086')
commit transaction
insert into TestValue values(@@TRANCOUNT,'3') --这里提交事务了,@@TRANCOUNT应该由1变为0了,实际结果还是2
end
ALTER?procedure??test_pro
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
*/