SQL Server编写事务处理有几种方法,写法是什么
Admin 2022-07-05 群英技术资讯 1039 次浏览
这篇文章给大家分享的是SQL Server编写事务处理有几种方法,写法是什么。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。本文实例讲述了SQL Server存储过程中编写事务处理的方法。分享给大家供大家参考,具体如下:
SQL Server中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码。希望能够对您有所帮助。
在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法:
begin tran update statement 1 ... update statement 2 ... delete statement 3 ... commit tran
这样编写的SQL存在很大隐患。请看下面的例子:
create table demo(id int not null) go begin tran insert into demo values (null) insert into demo values (2) commit tran go
执行时会出现一个违反not null 约束的错误信息,但随后又提示(1 row(s) affected)。 我们执行select * from demo 后发现insert into demo values(2) 却执行成功了。 这是什么原因呢? 原来 SQL Server在发生runtime 错误时,默认会rollback引起错误的语句,而继续执行后续语句。
如何避免这样的问题呢?有三种方法:
1. 在事务语句最前面加上set xact_abort on
set xact_abort on begin tran update statement 1 ... update statement 2 ... delete statement 3 ... commit tran go
当xact_abort 选项为on 时,SQL Server在遇到错误时会终止执行并rollback 整个事务。
2. 在每个单独的DML语句执行后,立即判断执行状态,并做相应处理。
begin tran update statement 1 ... if @@error <> 0 begin rollback tran goto labend end delete statement 2 ... if @@error <> 0 begin rollback tran goto labend end commit tran labend: go
3. 在SQL Server 2005中,可利用 try...catch 异常处理机制。
begin tran begin try update statement 1 ... delete statement 2 ... endtry begin catch if @@trancount > 0 rollback tran end catch if @@trancount > 0 commit tran go
下面是个简单的存储过程,演示事务处理过程。
create procedure dbo.pr_tran_inproc as begin set nocount on begin tran update statement 1 ... if @@error <> 0 begin rollback tran return -1 end delete statement 2 ... if @@error <> 0 begin rollback tran return -1 end commit tran return 0 end go
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天遇到了关于Sql Server最大连接数(Max Pool Size)的问题,后来通过查找一些资料解决了,所以想着总结下关于SQL Server最大连接数的内容,所以这篇文章主要介绍了SQL设置SQL Server最大连接数与查询语句,有需要的朋友们可以参考借鉴。
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection(俗称:非断开式连接),在线操作数据库时,任何对SqlConnection的操作都会引发DataReader的异常。下面同本文对dataset与datareader的区别详细学习吧
这篇文章介绍了SQL Server在T-SQL语句中使用变量的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
多表查询就是在一条查询语句中,从多张表里一起取出所需的数据,如果要想进行多表查询,下面这篇文章主要给大家介绍了关于SQL语句如何实现超简单的多表查询的相关资料,需要的朋友可以参考下
本文主要介绍了SQL查询连续登陆7天以上的用户的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008