SQL Server编写事务处理有几种方法
发布时间:2023-12-31 03:07:44 所属栏目:MsSql教程 来源:DaWei
导读: 这篇文章给大家分享的是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 现在大家对于SQL Server编写事务处理有几种方法,写法是什么的内容应该都有一定的认识了吧,希望这篇能对大家有所帮助。 (编辑:锡盟站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 将结果限制为前2个排名行
- SQL Server 置疑、可疑、正在恢复等情况了解
- SQL Server数据库怎样迁移MySQL
- sql-server-2008 – SQL Server 2008 – 一个表24gb,删除了
- sql-server – 如何保留SQL Server存储过程修订的历史记录
- sql-server – varchar大小在临时表中是否重要?
- 如何在没有matlabs数据库工具箱的情况下从matlab访问postgr
- Sql中session阻塞怎样处理,对阻塞你了解多少?
- 数据库设计 – 在逻辑/布尔数据库字段中使用[0,1]与[“Y”,
- sql server 2012 FileTable有什么些功能?
推荐文章
站长推荐