在存储过程中编写正确的事务处理代码(SQL_Server_2000
《在存储过程中编写正确的事务处理代码(SQL_Server_2000》由会员分享,可在线阅读,更多相关《在存储过程中编写正确的事务处理代码(SQL_Server_2000(5页珍藏版)》请在装配图网上搜索。
1、在 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 t
2、ran 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
3、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
4、 statement 2 . if error 0 begin rollback tran goto labend end commit tran labend: go3. 在SQL Server 2005中,可利用 try.catch 异常处理机制 begin tran begin try update statement 1 . delete statement 2 . end try 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
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。