SQL Server 中的嵌套事务

SqlServer嵌套事务机制了解 SQL Server 中的嵌套事务提供了一种将复杂事务逻辑分解为多个部分的方法,但它的实际行为并不如某些其他数据库那样独立管理每个事务,而是依赖于最外层事务的提交和回滚。正确地使用嵌套事务有助于简化事务管理和错误处理,但也需要注意其局限性,尤其是在回滚和提交的行为上。在 SQL Server 中,子事务回滚不会自动导致外层事务回滚。只有在外层事务中显式调用时,所有嵌套事务才会被回滚。子事务的回滚仅影响子事务内部的操作,而不影响外层事务的状态,除非外层事务遇到错误并选择回滚。 阅读详情

  在处理事务的时候,一般都用RollBack Transaction来回滚,但是如果在嵌套事务中这样使用的话,就会出现错误。

  在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0。例如:

  Begin Transaction -- @@TranCount = 1

  BeginTransaction -- @@TranCount = 2

  BeginTransaction -- @@TranCount = 3

  Commit Transaction -- @@TranCount = 2

  Commit Transaction -- @@TranCount = 1

  Commit Transaction -- @@TranCount = 0

  如果出现错误ROLLBACK TRANSACTION

  则:

  Begin Transaction -- @@TranCount = 1

  BeginTransaction -- @@TranCount = 2

  BeginTransaction -- @@TranCount = 3

  ROLLBACK TRANSACTION -- @@TranCount = 0

  Commit Transaction -- @@TranCount = 0---出现错误

  Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.

  如果被嵌套的事务中发生错误,最简单的方法应该是无论如何都先将它提交,同时返回错误码(一个正常情况不可能出现的代码如 -1)让上一层事务来处理这个错误,从而使@@TranCount 减1。 这样外层事务在回滚或者提交的时候能够保证外层事务在开始的时候和结束的时候保持一致。由于里层事务返回了错误码,因此外层事务(最外层)可以回滚事务,这样里面已经提交的事务也可以被回滚而不会出现错误。

  在项目中应该会常常出现这样的情况,一个存储过程里面用了事务,但是不能保证它会被别的带有事务的存储过程调用,如果单独调用的话,出现错误可以直接回滚,但是如果是被别的带事务的存储过程调用的话,RollBack 就会出错了。因此需要一种机制来区分,建立一个临时的变量来区分是否嵌套,和嵌套的层数,如下:

  declare @tempTranCount int

  set @tempTranCount = 0

  Begin Transaction

  set @tempTranCount = @tempTranCount +1

  …………

  --事务内要执行的代码

  …………

  IF @@ERROR<>0

  goto Error

  Commit Transaction

  Commit Transaction

  --下面返回要返回的值0只是个例子

  Return 0

  Error:

  IF(@@TranCount = @tempTranCount) RollBack Transaction

  Else Commit Transaction

  Return @Error

sqlserver嵌套事务总结 该文档从sqlserver事务讲起,详述ACID,@@trancount,在嵌套事务中使用保存点,命名事务等 立即下载

相关推荐

合宙Air780EP速连OneNET:AT+MQTT应用指南

本文详细讲解了合宙Air780EP使用AT指令通过MQTT接入OneNET的过程。

2401_82812461的博客 1390

SqlServer嵌套事务机制

收藏学习: 今天我们主研究一下SqlServer中嵌套事务使用。代码能说明大多数问题,看代码。 1.嵌套事务提交原理测试 [c-sharp] view plaincopy PRINT 'Trancount before transaction: ' + CAST(@@trancount as char(1))     BEGIN TRAN  PRINT 'After f

学无止境 2050

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8972

sql server 事务嵌套

COMMIT TRANSACTION (Transact-SQL)标志一个成功的隐性事务或显式事务的结束。如果 @@TRANCOUNT 为 1,COMMIT TRANSACTION 使得自从事务开始以来所执行的所有数据修改成为数...

cuanji3287的博客 270

AI数字人短视频数字人口播数字人分身建模流程全解析

在人工智能与计算机图形学蓬勃发展的当下,数字人建模作为打造虚拟数字人的核心环节,其流程复杂且精妙,融合了多种前沿技术与创意构思,为栩栩如生的数字人形象奠定基石。​。

2403_87518095的博客 1447

破解雪球网acw_sc__v2加密与无限debugger反爬策略

本文详细解析了雪球网的反爬机制,重点破解了其核心的acw_sc__v2加密参数与无限debugger反调试策略。通过实战案例,从抓包分析、逆向调试到算法还原,提供了完整的Python代码实现,帮助开发者掌握应对类似加密反爬的通用方法。

weixin_29207533的博客 1901

关于sql 事务嵌套

【代码】关于sql 事务嵌套。

u014332402的博客 611

国家自然基金回避专家有必要填写吗?被回避专家能看到吗?

不填也能中填1–2个最保险只填1个最直接竞争者。✅一句话结论可以不填,但建议填1–2个被回避专家绝对看不到如果你愿意,我可以再告诉你一个很多人不知道的国家自然基金“评审分组规则”——它其实决定了你的项目最可能送到哪些专家手里,这对地区基金中标率影响很大。

qq_15963745的博客 156

SqlServer嵌套事务控制

SqlServer中存储过程常常被嵌套执行.而每个存储过程都会有一个 独立的事务.即便是简单的一条Insert语句也会是当作隐式事务来执 行的. SqlServer提供了控制事务的开关项.很方便. SET XACT_ABORT 指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务 只要在每个存储...

254

C#winform自定义绘制曲线控件实例

本文实例讲解自定义绘制曲线控件过程。 在实际项目中,需要绘制曲线,系统的提供的绘制曲线的控件有时不能满足自己的需要,需要根据项目需要定制开发曲线控件。 实例目标,实时绘制显示温湿度值曲线。

qq_30725967的博客 1735

高通SDX35平台 modem启动异常分析

SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。

四儿家的小祖宗的博客 275

Sql Server 多层嵌套事务的执行结果怎样

摘要:主流数据库(如Oracle、PostgreSQL)通常使用保存点而非真正的嵌套事务。内部事务的"提交"只是标记,数据实际在外层事务提交时才持久化。若外层事务回滚,所有操作包括内部事务都将撤销。例外是自治事务(如Oracle的AUTONOMOUS_TRANSACTION),其提交独立于外层事务。因此,除非使用自治事务,否则嵌套事务的回滚将撤销所有操作。(99字)

yueke06442300的专栏 448

Python 爬虫实战:社交媒体(Facebook)评论数据抓取与情感分析

在当今数字化时代,社交媒体平台如 Facebook 已成为人们日常生活中不可或缺的一部分。它不仅是人们分享生活点滴、交流思想的场所,也为企业和研究人员提供了丰富的数据资源。通过分析社交媒体上的评论数据,我们可以了解用户的情感倾向、产品反馈以及社会热点话题等。本文将详细介绍如何使用 Python 爬虫技术抓取 Facebook 上的评论数据,并进行情感分析。这不仅是一次技术实战,更是一次数据探索之旅。

yansideyucsdn的博客 672

[SQL Server]嵌套事务与分布式事务

Sql Server支持嵌套事务:也就是说在前一事务未完成之前可启动一个新的事务,只有在外层的Commit Tran语句才会导致数据库的永久更改。请尝试执行以下语句:BEGIN  TRAN  tr0       BEGIN TRAN tr1        RO

小旭的技术博客 2359

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

sql server中嵌套事务

sql server中嵌套事务 我们在写事务时经常遇到的问题如下: 消息 266,级别 16,状态 2,过程 sp1,第 0 行 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 消息 3903,级别 16,状态 1,过程 sp2,第 15 行 ROL

kufeiyun的专栏 1557

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SQL SERVER 嵌套事务总结

先看一下SQL Server Online Help相关的说明 Begin Transaction:标记一个显式本地事务的起始点。BEGIN TRANSACTION 使 @@TRANCOUNT 按 1 递增。 Rollback Transaction: 将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。(嵌套事务时,该语句将所有内层事务回滚到最外面的 BEGIN TRANSACTION...

freebirds_zh的专栏 1691

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SQL Server 中的嵌套事务与@@TranCount(转)

在处理事务的时候,一般都用RollBack Transaction来回滚,但是如果在嵌套事务中这样使用的话,就会出现错误。 在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transact

tuzhen007的专栏 1096

SQL Server嵌套事务

一、@@TRANCOUNT 在将事务前,我们先来了解一下@@TRANCOUNT,@@trancount返回上传执行begin transaction语句的事务计数。 1、每执行一次begin transaction语句@@trancount 将增加1。 2、执行rollback transaction 语句@@trancount将变为0,但执行rollback transaction sa...

weixin_30335575的博客 219

SQL Server嵌套事务探讨 (转贴)

<br />转载自:http://www.cnblogs.com/kymo/archive/2008/05/14/1194161.html<br /> <br />先看一下SQL Server Online Help相关的说明Begin Transaction :标记一个显式本地事务的起始点。BEGIN TRANSACTION 使 @@TRANCOUNT 按 1 递增。 Rollback Transaction : 将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。(嵌套事务时,该语句将所有内

plean的专栏 754

mysql+nest+嵌套事务,SQL Server-存储过程中的嵌套事务

Lets say this is the situation:[Stored Proc 1]BEGINBEGIN TRANSACTION...exec sp 2COMMITENDNow, if SP 2 - rolls back for whatever reason, does SP 1 - commit or rollback or throw exception?Thanks.解决方案The...

weixin_32767137的博客 195

sql server中嵌套事务*

转自https://www.cnblogs.com/guanjie20/archive/2013/02/17/2914488.html 我们在写事务时经常遇到的问题如下: 消息 266,级别 16,状态 2,过程 sp1,第 0 行 EXECUTE后的事务计数指示BEGIN和COMMIT语句的数目不匹配。上一计数 = 1,当前计数 = 0。 消息 3903,级别 16...

weixin_30646315的博客 127

SQL Server嵌套事务探讨(转载)

先看一下SQL Server Online Help相关的说明 Begin Transaction:标记一个显式本地事务的起始点。BEGIN TRANSACTION 使 @@TRANCOUNT 按 1 递增。 Rollback Transaction: 将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。(嵌套事务时,该语句将所有内层事务回滚到最外面的 BEGIN TRANSACTI

cailinsun666的专栏 416
上一篇: PowerBuilder API Site
下一篇: 调用API函数使你的程序子窗口'闪出'显示
lenya
博客等级 码龄18年 30粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值