一、全局变量@@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