sqlserver中事务总结:begin tran,rollback tran,commit tran

 第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 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 表示还原到上个还原点

原文地址:https://www.cnblogs.com/newcapecjmc/p/10240900.html

时间: 2024-09-30 14:21:26

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

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 NVARC

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

转自  :SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题 问题: 1. System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配.上一计数 = 1,当前计数 = 0. 2. EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配.上一计数 = 0,当前计数 = 1. 后面的内容,是我之前

sql语句中BEGIN TRAN...COMMIT TRAN

BEGIN TRAN标记事务开始 COMMIT TRAN 提交事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN 之间作为一个事务处理 也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态.sql语句中BEGIN TRAN...COMMIT TRAN

【SqlServer】解析SqlServer中的事务

在这篇Blog中,笔者将会解析阐述SqlServer中的事务,希望可以对你有所帮助. 1.事务是什么 事务就是单个逻辑单元执行的一系列操作.事务都具有ACID特性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)和持久性(Durability). 原子性(Atomicity):事务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 一致性(Consistency):事务在完成时,必须使所有的数据都保持一致状态. 在相关数据库中,所有规则

事务操作(BEGIN/COMMIT/ROLLBACK/SAVE TRANSACTION)

BEGIN TRANSACTION 标记一个显式本地事务的起始点. BEGIN TRANSACTION 使 @@TRANCOUNT 按 1 递增. BEGIN TRANSACTION 代表一点,由连接引用的数据在该点逻辑和物理上都一致的. 如果遇上错误,在 BEGIN TRANSACTION 之后的所有数据改动都能进行回滚,以将数据返回到已知的一致状态. 每个事务继续执行直到它无误地完成并且用 COMMIT TRANSACTION 对数据库作永久的改动,或者遇上错误并且用 ROLLBACK TR

sqlserver中创建包含事务的存储过程

什么是事务 事务时包含1条或多条语句的逻辑单元.事务中的语句是一个整体,要么一起提交,要么一起撤销.事务在提交前可以回滚,一旦提交就不能撤销修改了,是永久性的修改. 为什么使用事务 可以例举生活中的例子,比如银行转账:A向B转100万.程序的执行顺序:1.A账户减掉100万 2.B账户增加100万.若是都成功执行倒没什么,假设1成功执行,2执行失败,就会出问题.运用事务就不会出现这种问题,因为只要其中有一步操作失败,事务就会回滚,之前的所有操作将会被撤销. 事务的基本控制语句 1.BEGIN T

SqlServer中的事务隔离级别、锁机制

事务 作用:用来执行一连串的动作,并且保证所有动作要么都执行.要么都不执行. 属性:原子行.一致性.隔离性.持久性 锁 作用:SqlServer使用锁来实施事务隔离属性. 阻塞 定义:如果一个事务持有一数据资源的锁,而另一事务请求相同资源的不兼容的锁,则新锁的请求将被阻塞. 默认情况下,被阻塞的请求会一直等待,直到原来的事务释放相关的锁. 事务的隔离级别 可设置的有6个(从上往下 隔离级别越来越高): 1.read uncommitted 2.read committed 3.repeatabl

BEGIN TRAN...COMMIT TRAN 意思与用法

BEGIN TRAN标记事务开始 COMMIT TRAN 提交事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN 之间作为一个事务处理 也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态.

SQLSERVER分布式事务使用实例

尊重原著作:本文参考自http://www.jb51.net/article/43540.htm --BEGIN DISTRIBUTED TRANSACTION [transactionname]--标志一个由分布式事务处理协调器MSDTC管理的TSQL分布式事务开始--SERVER A服务器为主控服务器.当连接发出后续COMMIT TRANSACTION或--ROLLBACK TRANSACTION语句时,主控服务器请求MSDTC在所涉及的服务器间管理--分布式事务的完成 --SQLSERVE