SQLServer:存储过程中编写事务处理的方法小结

/**8.SQLServer存储过程中编写事务处理的方法小结**/

芒市网站建设公司成都创新互联,芒市网站设计制作,有大型网站制作公司丰富经验。已为芒市超过千家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的芒市做网站的公司定做!

原文出处:http://www.jb51.net/article/80636.htm

本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码。

1.常见写法:

在编写SQL Server事务相关的存储过程代码时,经常看到下面这样的写法:

begin tran

update statement 1 ...

update statement 2 ...

delete statement 3 ...

commit tran

 

2.存在的问题/隐患:

执行时会出现一个违反not null约束的错误信息,但随后又提示(1 row(s) affected)。我们执行select* from demo后发现insert into demo values(2)却执行成功了。这是什么原因呢?原来 SQL Server在发生runtime错误时,默认会rollback引起错误的语句,而继续执行后续语句。

create table demo(id int notnull)

go

begin tran

insert into demo values (null)

insert into demo values (2)

commit tran

go

3.如何避免这样的问题呢?有三种方法:

方法1.在事务语句最前面加上set xact_abort on;当xact_abort选项为on时,SQLServer在遇到错误时会终止执行并rollback整个事务。

setxact_abort on

begintran

updatestatement 1 ...

updatestatement 2 ...

deletestatement 3 ...

committran

go

方法2.在每个单独的DML语句执行后,立即判断执行状态,并做相应处理。

begintran

updatestatement 1 ...

if @@error <>0

beginrollbacktran

gotolabend

end

deletestatement 2 ...

if @@error <> 0

beginrollbacktran

gotolabend

end

committran

labend:

go

方法3.在SQL Server 2005中,可利用 try...catch异常处理机制。

begintran

begintry

updatestatement 1 ...

deletestatement 2 ...

endtry

begincatch

if @@trancount >0

rollbacktran

endcatch

if @@trancount >0

committran

go

 

4. 演示:下面是个简单的存储过程,演示事务处理过程。

--set nocount on 表示不返回计数

create procedure dbo.pr_tran_inprocas 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

 

执行:

Exec dbo.pr_tran_inproc

当前题目:SQLServer:存储过程中编写事务处理的方法小结
地址分享:https://www.cdcxhl.com/article32/ghdjsc.html

成都网站建设公司_创新互联,为您提供域名注册品牌网站设计网站排名手机网站建设搜索引擎优化外贸网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站制作