嵌套事务及事务分类
全局变量@@trancount
返回当前连接的活动事务数
显示事务
用begin transaction明确指定事务的开始
最常用的事务类型
隐性事务
通过设置set implicit_transactions on语句,将隐性事务模式设置为打开】
其后的T_SQL语句自动启动一个新事物
提交或回滚一个事务后,下一个T-SQL语句又将启动一个新事物
自动提交事务
SQL sever 的默认模式
每条单独的T-SQL语句视为一个事务
例子
--commit 对事务数的影响 (使用嵌套事务) print @@trancount --在没有事务的时候查看事务数 begin tran --开始事务 print @@trancount --开始事务, @@trancount将被设置为1 begin tran --开始第二个事务 print @@trancount --事务数+1 commit tran --提交第二个事务 print @@trancount --事务数减一 commit tran --提交第一个事务,事务数-1 print @@trancount go --rollback(回滚\撤销)对事务的影响 print @@trancount --在没有事务的时候查看事务数 begin tran --开始一个事务数 print @@trancount --事务数+1 begin tran --开始第二个事务 print @@trancount --事务数 +1 rollback tran --回滚事务,将事务数清0,所有活动的事务都将回滚 print @@trancount go
例子2:
--【1】显示事务 begin tran use E_Market go set nocount on --不显示受影响的行数 --设置显示事务模式 set implicit_transactions off --关闭隐式事务 go print'开始事务数' + cast(@@trancount as varchar(10)) go if exists(select * from sysobjects where name='table1') drop table table1 go create table table1 ( coll int ) --向表中插入一条数据 insert into table1 values(1) print '使用显示事务数:' + cast(@@trancount as varchar(10)) --使用显示事务 begin tran print '显示事务的个数:' + cast(@@trancount as varchar(10)) commit tran --提交事务 go print '显示事务提交后事务的个数是:' + cast(@@trancount as varchar(10)) /* 结果为: 开始事务数0 使用显示事务数:0 显示事务的个数:1 显示事务提交后事务的个数是:0 */ --[2]设置隐式事务模式 print '设置隐式事务模式' set implicit_transactions on --未标识事务的开始 insert into table1 values(2) print '使用事务数:' + cast(@@trancount as varchar(10)) commit tran --提交事务,如果不提交那么将在执行下面的任意一条语句中自动开启下一个事务 /*所有的create, truncate table, insert, select, alter table, crant, update,所有的drop,rovoke,delete等*/ print '显示提交后事务的个数是:' + cast(@@trancount as varchar(10)) --自动提交事务 --当设置implicit_transaction off(设置成显示模式后)就恢复成了自动提交模式 set implicit_transactions off --关闭隐式事务,恢复成了显示模式,出现自动提交模式 insert into table1 values(3) --没有错误自动提交 print '使用事务数:' + cast(@@trancount as varchar(10)) insert into table1 values(3,5) --出现错误自动回滚 print '使用事务数:' + cast(@@trancount as varchar(10))