一、全局变量@@TRANCOUNT

    返回当前连接的活动事务数。

二、显示事务

    BGIN TRANSACTION明确指定事务的开始。

    最常用的事务类型

三、隐性事务

    通过设置SET IMPLICIT_TANSACTIONS ON 语句,将隐性事务模式设置为打开。

    其后的T-SQL语句自动启动一个新事务。

    提交或回滚一个事务后,下一个T-SQL语句又将启动一个新事务。

四、自动提交事务

    SQL Server的默认模式。

    每条单独的T-SQL语句视为一个事务。


--COMMIT 对事务数的影响 (使用了嵌套事务)

PRINT @@TRANCOUNT  --在没有事务的时候查看一下事务数

BEGIN TRAN --开始事务

      PRINT @@TRANCOUNT --开始事务,@@trancount将被设置为1

 BEGIN TRAN --开始第二个事务

       PRINT @@TRANCOUNT --事务数+1,事务数为2

 COMMIT TRAN --提交第二个事务 此时事务被减1 

 PRINT @@TRANCOUNT --事务数为1

COMMIT TRAN --提交第一个事务,事务数-1 为,0

PRINT @@TRANCOUNT

GO


--ROLLBACK(回滚\撤消)对事务数的影响

PRINT @@TRANCOUNT --没有事务的时候输出一下事务数

BEGIN TRAN --开始一个事务

      PRINT @@TRANCOUNT --事务数+1

 BEGIN TRAN --开起第二个事务

       PRINT @@TRANCOUNT --事务数+1

ROLLBACK TRAN --回滚事务,将事务数清0,所有活动的事务都将回滚



---【1】显示事务 BEGIN TRAN

USE ASP_NET

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 INYO Table1 VALUES(2)

PRINT '使用事务数:'+CAST(@@TRANCOUNT AS varchar(10))

COMMIT TRAN --提交事务,如果不提交那么将在执行下面任意一条语句中自动开启下一个一屋

/*索引的CREATE,TRANCATE TABLE,INSERT,SELECT,ALTER,TABLE,GRANT,UPDATE,所有的DROP,ROVOKE,DELET*/

PRINT '显示提交之后的事务数:'+CAST(@@TRANCOUNT AS varchar(10))

GO



设置隐式事务模式

使用事务数:1

显示提交之后的事务:0




--【3】自动提交事务

--当设置IMPLICIT_TRANSACTIONS OFF就恢复成了自动提交模式


SET IMPLICIT_TRANSACTIONS OFF --设置为显示事务模式,恢复成了自动提交事务

GO


INSERT INTO Table1 VALUES(3)  --没有错误自动提交

PRINT @@TRANCOUNT


INSERT INTO Table1 VALUES(5,3) ---出现错误,自动回滚

GO