MSSQL事务的存储过程
2014-08-07 09:49
941 查看
在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示:
房型表:RoomType
房间表:Room
首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rTypeId
分析这两个表,我们会发现这样一个问题:在房间表和房型表管理中,当我们修改或者删除一个RoomType表,对应的Room表我们也要做修改和删除,那么我们怎么解决这个问题呢?首先可以在数据库中设置级联删除,或者利用触发器也可以解决、、、这些方法都有一定的弊端,在实际开发中,我们会采取使用事务来解决这个问题,这种方法简单而且开发效率高,容易维护。
要求:在删除RoomType的同时把Room表中存在该房型的也删除.
思路:在删除RooType的时候,我们通过RoomType.rTypeId=Room.rTypeId找到Room中存在该房型的记录,把也它删掉。
说明:删除不是把整条记录从数据库删除,是将数据标识改为1,0是代表未删除。
下面介绍删除的存储过程:
代码:
ALTER procedure [dbo].[usp_DelToomType] --创建删除房型的存储过程 @rTypeId int --房型参数 as begin transaction --开始事务 declare @error int --定义一个变量标识错误号 update RoomType set rTypeIsDel=1 where rTypeId=@rTypeId --根据条件删除房型,rTypeIsDel=1标识删除,0标识未删除 set @error+=@@ERROR if(@error<>0) --不等于0说明这一句执行出现错误 rollback transaction --事务回滚 update Room set roomIsDel=1 where rTypeId=@rTypeId --根据条件删除房间 set @error+=@@ERROR if(@error<>0) --不等于0说明这一句执行出现错误 rollback transaction --事务回滚 else commit transaction --提交事务
最后,数据层直接调用存储过程的方法即可完成删除房型的同时把存在该房型的房间也删除。
您可能感兴趣的文章:
相关文章推荐
- MSSQL数据库嵌套存储过程的事务控制
- MSSQL 之事务订单存储过程
- 存储过程中事务的使用
- .Nettiers的事件:下拉控件数据绑定,Insert,调用自定存储过程,获取新增ID,事务,DeepLoad,DeepSave,Save,Update,DeepDelete【原创】
- sql server在存储过程中使用游标和事务
- codeigniter -搭配 mssql :问题1 :执行存储过程
- 在存储过程中编写正确的事务处理代码
- mysql中的存储过程和事务隔离
- 存储过程事务
- 存储过程中使用事务
- LPAD在Oracle中和 mssql以及在MySQL中的不同用法 以及调用存储过程方法
- 触发器、游标、函数、存储过程、事务
- SQL 函数、存储过程、游标与事务模板
- mssql 存储过程学习中 [4] 在存储过程中调用另一个存储过程
- 存储过程中使用事务---转载
- 存储过程中控制事务带来的问题
- 在存储过程中运用事务
- MSSQL分页存储过程完整示例(支持多表分页存储)
- MSSQL 2000更改表和存储过程的所有者
- 资深架构师Sum的故事:(Mysql)InnoDB下,存储过程中事务的处理