第1个相关用法:摘自:https://shiyousan.com/post/f13d29b7-0d87-4168-bd8b-8b28b0991b5a

以下是出现错误的SQL部分语句:

此错误的原因是由于一个事务只能对应一个操作,要么回滚要么提交,所以执行了ROLLBACK TRAN语句后一定不能再执行COMMIT TRAN语句!!!而无论是回滚事务还是提交事务,都是不会中断SQL处理流程的,要想中断流程就需要使用RETURN语句。

上面范例中的语句先执行了ROLLBACK TRAN回滚操作(这里造成事务已经处理完成),但是并没有中断流程,所以后面的语句依然会继续执行。执行过程中由于没有任何异常错误,最终导致重复执行了底部的COMMIT TRAN事务提交操作,最后一次事务操作没有找到相匹配的事务声明,就会提示"COMMIT TRANSACTION(事务提交) 请求没有对应的 BEGIN TRANSACTION(事务声明)"这个错误。

所以要跳出事务,在进行回滚ROLLBACK操作后,还必须马上使用RETURN语句跳出执行流程。以下为修改后的语句:

这里在做一个简单测试,有助于理解所谓的一个事务只能对应一个事务操作的意思,在SQL中输入下图的三行代码并执行:

总结: roolback 之后不能再次commit,事务只能开启一个!!!

第2个用法总结:https://www.cnblogs.com/accumulater/p/6089822.html

SQL事务用法begin tran,commit tran和rollback tran的用法

 

Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务。

begin tran表示开始事务,

commit tran表示提交事务,

rollback tran表示回滚事物

EXEC TEST_PROC '文综','包括历史,地理,政治','政治','文综的一门' 
CREATE PROCEDURE [dbo].[TEST_PROC] 
@A_Name NVARCHAR(20), -- A表姓名 
@A_Remark NVARCHAR(4000), -- A表备注 
@B_Name NVARCHAR(20), -- B表姓名 
@B_Remark NVARCHAR(4000) -- B表备注 
AS 
BEGIN TRY 
BEGIN TRAN 
-- 在A表中插入数据 
INSERT INTO [dbo].[A] 
( [A_Name] 
, [A_Remark] ) 
VALUES 
( @A_Name 
, @A_Remark ) 
-- 在B表中插入数据 
INSERT INTO [dbo].[B] 
( [A_ID] 
, [B_Name] 
, [B_Remark] ) 
VALUES 
( @@IDENTITY -- 返回最后插入的标识值 
, @B_Name 
, @B_Remark ) 
COMMIT TRAN 
END TRY 
BEGIN CATCH 
ROLLBACK TRAN 
INSERT INTO [dbo].[ErrorLog] 
( [EL_Procedure] -- 异常存储过程名称 
, [EL_OperateTime] ) -- 报异常时间 
VALUES 
( 'TEST_PROC' 
, CONVERT(DATETIME,GETDATE(),20) ) 
END CATCH

注:1. @@IDENTITY的作用是返回最后插入的标识值。 
2. 我在rollback tran中加入一个专门记录异常的表,以便产于异常发生的时间和确定报异常的存储过程的名称。 
原文链接: 
begin tran 可以理解成新建一个还原点。 
commit tran提交这个自begin tran开始的修改 
rollback tran 表示还原到上个还原点

sqlserver中事务总结:begin tran,rollback tran,commit tran的更多相关文章

  1. Sql Server 中事务(begin tran/commit tran/rollback tran)的用法

    ALTER PROCEDURE [dbo].[Proc_Test_commit1]     @result int output, --成功 1; 失败 0     @message nvarchar ...

  2. 关于事务回滚,rollback tran到底要不要写?

    关于事务回滚,有些不明白,不知道rollback tran在什么时候用. begin tran update 表1 update 表2 commit tran 这种写法,在更新表1或表2时出错,事务会 ...

  3. SQL中事务以及全局变量的使用

    事务的定义 简单的说,事务处理可以用来维护数据库的完整性,保证一批SQL语句要么全执行,要么全部不执行 事务的特性 原子性  一致性  持久性  隔离性        注:一元九个 事务的使用 sel ...

  4. SQL 中事务的分类

    先讲下事务执行流程: BEGIN和COMMIT PRINT @@TRANCOUNT --@@TRANCOUNT统计事务数量 BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRA ...

  5. day18-事务与连接池 3.jdbc中事务操作介绍

    那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...

  6. 【转】【SQLServer】SQL事务用法begin tran,commit tran和rollback tran的用法

    Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务.begin tran表示开始事务, commit tran表示提交事 ...

  7. SQL事务用法begin tran,commit tran和rollback tran的用法

    Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务. begin tran表示开始事务, commit tran表示提交 ...

  8. SQL 事务 begin tran、commit tran、rollback tran 的用法

    首先理解一下这三个事务的大概意思: begin Transaction 可以理解成新建一个还原点. commit Transaction 提交这个自begin tran开始的修改 rollback T ...

  9. SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题

    转自  :SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题 问题: 1. System.Data.SqlClient.SqlExcepti ...

随机推荐

  1. display:flex代替float

    昨天做一个css的东西,在开始用js的时候才发现被float占位了 因为float浮动起来了,我清除了浮动,但是还是占位 然后我同事就告诉我其实可以不用float来左右浮动 在父元素上用display ...

  2. 《java并发编程实战》读书笔记7--线程池的使用

    第8章 线程池的使用 8.1 在任务与执行策略之间的隐性耦合 虽然Executor框架为制定和修改执行策略都提供了相当大的灵活性,但并非所有的任务都适用所有的执行策略.有些类型的任务需要明确地指明执行 ...

  3. C# Merge into的使用详解

    Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...

  4. Django_admin源码流程

    admin.py from django.contrib import admin from . import models """ 通过原生的django admin来 ...

  5. hdu 3078(LCA的在线算法)

    Network Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  6. 如何配置Java环境,包括JDK,Maven等

    下载JDK并安装 搜索JDK,官网立马就出来了,下载之后个人觉得毕竟开发,毕竟这东西不大,C盘稳一点,安装在C盘可以的 配置 右键打开计算机->属性->高级系统设置->高级-> ...

  7. 导出数据到word

    打野的时候,碰到一个需求,导出简历信息. 两条思路: 第一条,直接画所有的表格,填充数据. 第二条,加载一个空的模板,然后填充数据. 因为导出的有格式的,所以最后选择了使用模板进行替换,然后填充数据. ...

  8. bzoj 4327 AC自动机

    思路:将能跑到的状态标记一下,在bfs搜一下就好啦. #include<bits/stdc++.h> #define LL long long #define ll long long # ...

  9. npoi的基本操作

    ////自动换行               ////自动换行翻译成英文其实就是Wrap的意思,所以这里我们应该用WrapText属性,这是一个布尔属性               //style6. ...

  10. 2017 Hackatari Codeathon B. 2Trees(深搜)(想法)

    B. 2Trees time limit per test 0.75 seconds memory limit per test 256 megabytes input standard input ...