Sql Server 三种事务模式

显式事务
显式事务(Explicit Transaction)是由设计人员明确定义事务的启动与结束的一种事务。
可使用 BEGIN TRANSACTION、COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION、ROLLBACK WORK 等语句来定义显式事务。

Create PROCEDURE sp_test(@ID varchar(50))
AS 
Begin Tran --事务开始 
Update Tb set CDate=getdate() where TbID=@ID 
if @@ERROR >0 --若有错误 
BEGIN 
    
ROLLBACK TRAN --事务还原 
    Return 
End 
DECLARE @PID varchar(50),@TbQty int 
DECLARE cur_1 CURSOR FOR SELECT PID, Qty FROM TbDetail where TbID=@ID --声明游标数据事务 
OPEN cur_1 --打开游标 
FETCH NEXT FROM cur_1 INTO @PID,@TbQty --从游标获取两个字段值到变量 
WHILE @@FETCH_STATUS = 0 --用循环逐项处理 
BEGIN 
    
Update Ta set TaQty=TaQty-@TbQty where PID=@PID 
    
FETCH NEXT FROM cur_1 INTO @PID,@TbQty 
    
if @@ERROR >0 –若有错误 
    
Begin
        
ROLLBACK TRAN --事务还原 
        CLOSE cur_1 --关闭及释放游标 
        DEALLOCATE cur_1 
        
BREAK 
    
END 
END 
CLOSE cur_1 
DEALLOCATE cur_1 
COMMIT TRAN --事务提交 

自动提交事务
这是 SQL Server 的默认模式,所有未特别声明的事务,都被视为自动提交的事务。但
是只以一个操作作为事务范围,如一个 Update 或 Delete 等。当事务完成时,每个单独的
T-SQL 语句都将被提交或因出现错误而还原。

隐式事务
通过 API 函数或 T-SQL 的 SET IMPLICIT_TRANSACTIONS ON 语句将隐式事务模式
设置为打开。下一个语句会自动开始一项新的事务。当该项事务完成时,下一个 T-SQL 语
句会再开始一项新的事务。

SET IMPLICIT_TRANSACTIONS ON 
 
INSERT INTO Ta (aa,bb) VALUES ('11''22'
COMMIT TRANSACTION 
GO 

以上程序表示先使用“SET IMPLICIT_TRANSACTIONS ON”启动隐式事务,然后在
下一行程序创建事务,以 Insert 语句添加一项记录至 Category 数据表,最后再用 COMMIT
TRANSACTION 提交事务。提交之后若还有程序,会再开始新的事务。总之,隐式事务的
意思是由 SQL Server 系统在所有提交、还原之后,自动创建新事务。

原文地址:https://www.cnblogs.com/tohen/p/1791832.html