在酒店管理系統開發中,我們會創建房間表和房間類型表(房型表)這兩個表,如下圖所示:
房型表: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 事務說明
- c#實現sqlserver事務處理示例
- 使用Sqlserver事務發布實現數據同步(sql2008)
- SQLServer分布式事務問題
- Sqlserver 存儲過程中結合事務的代碼
- Transactional replication(事務復制)詳解之如何跳過一個事務