MSSQL事務(wù)的存儲過程
在酒店管理系統(tǒng)開發(fā)中,我們會創(chuàng)建房間表和房間類型表(房型表)這兩個(gè)表,如下圖所示:
房型表:RoomType
房間表:Room
首先這兩個(gè)表的關(guān)系:Room是從表,RoomType是主表,兩表有主外鍵關(guān)系,RoomType.rTypeId=Room.rTypeId
分析這兩個(gè)表,我們會發(fā)現(xiàn)這樣一個(gè)問題:在房間表和房型表管理中,當(dāng)我們修改或者刪除一個(gè)RoomType表,對應(yīng)的Room表我們也要做修改和刪除,那么我們怎么解決這個(gè)問題呢?首先可以在數(shù)據(jù)庫中設(shè)置級聯(lián)刪除,或者利用觸發(fā)器也可以解決、、、這些方法都有一定的弊端,在實(shí)際開發(fā)中,我們會采取使用事務(wù)來解決這個(gè)問題,這種方法簡單而且開發(fā)效率高,容易維護(hù)。
要求:在刪除RoomType的同時(shí)把Room表中存在該房型的也刪除.
思路:在刪除RooType的時(shí)候,我們通過RoomType.rTypeId=Room.rTypeId找到Room中存在該房型的記錄,把也它刪掉。
說明:刪除不是把整條記錄從數(shù)據(jù)庫刪除,是將數(shù)據(jù)標(biāo)識改為1,0是代表未刪除。
下面介紹刪除的存儲過程:
代碼:
ALTER procedure [dbo].[usp_DelToomType] --創(chuàng)建刪除房型的存儲過程 @rTypeId int --房型參數(shù) as begin transaction --開始事務(wù) declare @error int --定義一個(gè)變量標(biāo)識錯(cuò)誤號 update RoomType set rTypeIsDel=1 where rTypeId=@rTypeId --根據(jù)條件刪除房型,rTypeIsDel=1標(biāo)識刪除,0標(biāo)識未刪除 set @error+=@@ERROR if(@error<>0) --不等于0說明這一句執(zhí)行出現(xiàn)錯(cuò)誤 rollback transaction --事務(wù)回滾 update Room set roomIsDel=1 where rTypeId=@rTypeId --根據(jù)條件刪除房間 set @error+=@@ERROR if(@error<>0) --不等于0說明這一句執(zhí)行出現(xiàn)錯(cuò)誤 rollback transaction --事務(wù)回滾 else commit transaction --提交事務(wù)
最后,數(shù)據(jù)層直接調(diào)用存儲過程的方法即可完成刪除房型的同時(shí)把存在該房型的房間也刪除。
相關(guān)文章
sql server 常用的幾個(gè)數(shù)據(jù)類型
Sql server中常用的幾個(gè)數(shù)據(jù)類型,主要方便剛開始學(xué)習(xí)sqlserver的朋友。2009-07-07sqlserver四舍五入使用round函數(shù)及cast和convert函數(shù)
大家在遇到sqlserver四舍五入除了用round函數(shù)還有沒有其他方法呢?下面小編給大家介紹使用cast和convert函數(shù),感興趣的朋友一起學(xué)習(xí)吧2015-11-11動態(tài)給表添加刪除字段并同時(shí)修改它的插入更新存儲過程
有一個(gè)表,用戶需要在后臺操作它,希望能對它動態(tài)進(jìn)行添加刪除字段2011-11-11隨機(jī)抽取的sql語句 每班任意抽取3名學(xué)生
表 student ,字段 class 及name 。其中class 表示班級,name 表示每班學(xué)生姓名。要求每班任意抽取3名學(xué)生出來,進(jìn)行學(xué)校大掃除2014-07-07