码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server事物的存储过程

时间:2014-08-07 00:39:57      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   strong   数据   

在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示:

房型表:RoomType

                   bubuko.com,布布扣

房间表:Room

                  bubuko.com,布布扣

 

首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rTypeId

分析这两个表,我们会发现这样一个问题:在房间表和房型表管理中,当我们修改或者删除一个RoomType表,对应的Room表我们也要做修改和删除,那么我们怎么解决这个问题呢?首先可以在数据库中设置级联删除,或者利用触发器也可以解决、、、这些方法都有一定的弊端,在实际开发中,我们会采取使用事务来解决这个问题,这种方法简单而且开发效率高,容易维护。

要求:在删除RoomType的同时把Room表中存在该房型的也删除.

思路:在删除RooType的时候,我们通过RoomType.rTypeId=Room.rTypeId找到Room中存在该房型的记录,把也它删掉。

说明:删除不是把整条记录从数据库删除,是将数据标识改为1,0是代表未删除。

下面介绍删除的存储过程:

代码:

 1 ALTER procedure [dbo].[usp_DelToomType] --创建删除房型的存储过程
 2 @rTypeId int --房型参数
 3 as
 4 begin transaction  --开始事务
 5   declare @error int  --定义一个变量标识错误号
 6   update RoomType set rTypeIsDel=1 where rTypeId=@rTypeId  --根据条件删除房型,rTypeIsDel=1标识删除,0标识未删除
 7   set @error+=@@ERROR
 8   if(@error<>0) --不等于0说明这一句执行出现错误
 9   rollback transaction --事务回滚
10   update Room set roomIsDel=1 where rTypeId=@rTypeId  --根据条件删除房间
11   set @error+=@@ERROR  
12   if(@error<>0) --不等于0说明这一句执行出现错误
13   rollback transaction --事务回滚
14  else 
15     commit transaction  --提交事务

最后,数据层直接调用存储过程的方法即可完成删除房型的同时把存在该房型的房间也删除。

SQL Server事物的存储过程,布布扣,bubuko.com

SQL Server事物的存储过程

标签:style   blog   http   color   使用   io   strong   数据   

原文地址:http://www.cnblogs.com/xiaoyuanding/p/3896076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!