iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server:存储过程中编写事务处理的方法小结
  • 386
分享到

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

2024-04-02 19:04:59 386人浏览 独家记忆
摘要

原文出处: Http://www.jb51.net/article/80636.htm本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码。 1. 常见写法:在编写SQL Serv

原文出处: 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


您可能感兴趣的文档:

--结束END--

本文标题: SQL Server:存储过程中编写事务处理的方法小结

本文链接: https://www.lsjlt.com/news/39217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作