当前位置: 首页 > news >正文

SQL Server 事务处理 回滚事务

 

--创建表:

 

GO

CREATE TABLE [dbo].[tb1](

     [Id] [int] NOT NULL,

     [c1] [nvarchar](50) NULL,

     [c2] [datetime] NULL,

CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED

(

     [Id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] )

ON [PRIMARY]

GO

 

--解决方案(一)

declare   @iErrorCount   int  

set @iErrorCount = 0  

begin tran Tran_2015_09_30

  insert into tb1(Id, c1) values(1,'1')  

  set @iErrorCount=@iErrorCount+@@error  

  insert into tb1(Id, c1) values(2,'2')  

  set @iErrorCount=@iErrorCount+@@error  

  insert into tb1(Id, c1) values('xxxx3','3')  

  set @iErrorCount=@iErrorCount+@@error  

  insert into tb1(Id, c1) values(4,'4')  

  set @iErrorCount=@iErrorCount+@@error  

  insert into tb1(Id, c1) values(5,'5')  

  set @iErrorCount=@iErrorCount+@@error  

if @iErrorCount=0

begin    

  COMMIT TRAN Tran_2015_09_30 --执行事务

end

else  

begin    

  ROLLBACK TRAN Tran_2015_09_30 --回滚事务

end

GO

 

--解决方案(二)

begin try
     begin tran Tran_2015_09_30
 
        insert into tb1(Id, c1) values(1,'1')
 
        insert into tb1(Id, c1) values(2,'2')
 
        insert into tb1(Id, c1) values('xxxx3','3')
 
        insert into tb1(Id, c1) values(4,'4')
 
        insert into tb1(Id, c1) values(5,'5')
 
    COMMIT TRAN Tran_2015_09_30
end try
begin catch
     raiserror 50005N'出错了'
     ROLLBACK TRAN Tran_2015_09_30  --回滚事务
end catch

GO

 

--解决方案(三)

--set XACT_ABORT ON   ---如果不设置该项为ON,在sql中默认为OFF,那么只只回滚产生错误的 Transact-SQL 语句;设为ON,回滚整个事务

SET XACT_ABORT ON  --语句产生运行时错误,则整个事务将终止并回滚。
Begin Tran
    INSERT INTO tb1(Id, c1) VALUES(1,'1')
    INSERT INTO tb1(Id, c1) VALUES('XX2','2') --此句产生错误时,就会回滚整个事务
Commit Tran

 

GO

 

 

begin tran t1 ---启动一个事务

update [water].[dbo].[ErrorInf]
set ErrorMessage='test'
where ID=6

insert into [water].[dbo].[ErrorInf]([ID],ErrorMessage,[Description])
Values(1,'test1','test1')

commit tran t1  ---提交事务

 

 

--//参考:

1. EmanLee, Eman Lee's Space (blog, website)

 SQL Server 事务处理 回滚事务  ;

2. 代码泪 SQL Server 事务及回滚事务

相关文章:

  • android usb挂载分析---MountService启动
  • 关于ssh,一次深刻的打我脸式的学习。
  • ZH奶酪:PHP的cURL库
  • 【转】一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
  • 第一课 计算机及操作系统基础知识
  • 033-UITableViewHeaderFooterView-iOS笔记
  • 安装django
  • 10.11查询
  • 【 D3.js 入门系列 --- 3 】 做一个简单的图表!
  • zookeeper管理应用服务器配置文件
  • mybatis0208 缓存
  • svn回退到具体的版本
  • 基于HTML5实现3D热图Heatmap应用
  • 关于复杂指针数组,函数以及函数指针,数组思考
  • android源码编译-Mac 10.11 xcode5.1.1
  • linux学习笔记
  • PAT A1092
  • SQL 难点解决:记录的引用
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • vue-router的history模式发布配置
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 关于springcloud Gateway中的限流
  • 将 Measurements 和 Units 应用到物理学
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 少走弯路,给Java 1~5 年程序员的建议
  • 项目实战-Api的解决方案
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Linux(Source Insight安装及工程建立)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (四)图像的%2线性拉伸
  • (一)基于IDEA的JAVA基础12
  • .dwp和.webpart的区别
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET CORE Aws S3 使用
  • .NET delegate 委托 、 Event 事件
  • .NET Remoting学习笔记(三)信道
  • .NET 中让 Task 支持带超时的异步等待
  • .NET连接数据库方式
  • .NET命名规范和开发约定
  • /etc/motd and /etc/issue
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @RequestMapping-占位符映射
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [ARC066F]Contest with Drinks Hard
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [CSS] 点击事件触发的动画
  • [GN] 设计模式——面向对象设计原则概述
  • [go 反射] 进阶
  • [javaee基础] 常见的javaweb笔试选择题含答案
  • [one_demo_1]php中的文件锁
  • [pdf]《软件方法》强化自测题业务建模需求分析共191页,230题