MSSQL事務(wù)的存儲(chǔ)過(guò)程
在酒店管理系統(tǒng)開發(fā)中,我們會(huì)創(chuàng)建房間表和房間類型表(房型表)這兩個(gè)表,如下圖所示:
房型表:RoomType
房間表:Room
首先這兩個(gè)表的關(guān)系:Room是從表,RoomType是主表,兩表有主外鍵關(guān)系,RoomType.rTypeId=Room.rTypeId
分析這兩個(gè)表,我們會(huì)發(fā)現(xiàn)這樣一個(gè)問(wèn)題:在房間表和房型表管理中,當(dāng)我們修改或者刪除一個(gè)RoomType表,對(duì)應(yīng)的Room表我們也要做修改和刪除,那么我們?cè)趺唇鉀Q這個(gè)問(wèn)題呢?首先可以在數(shù)據(jù)庫(kù)中設(shè)置級(jí)聯(lián)刪除,或者利用觸發(fā)器也可以解決、、、這些方法都有一定的弊端,在實(shí)際開發(fā)中,我們會(huì)采取使用事務(wù)來(lái)解決這個(gè)問(wèn)題,這種方法簡(jiǎn)單而且開發(fā)效率高,容易維護(hù)。
要求:在刪除RoomType的同時(shí)把Room表中存在該房型的也刪除.
思路:在刪除RooType的時(shí)候,我們通過(guò)RoomType.rTypeId=Room.rTypeId找到Room中存在該房型的記錄,把也它刪掉。
說(shuō)明:刪除不是把整條記錄從數(shù)據(jù)庫(kù)刪除,是將數(shù)據(jù)標(biāo)識(shí)改為1,0是代表未刪除。
下面介紹刪除的存儲(chǔ)過(guò)程:
代碼:
ALTER procedure [dbo].[usp_DelToomType] --創(chuàng)建刪除房型的存儲(chǔ)過(guò)程 @rTypeId int --房型參數(shù) as begin transaction --開始事務(wù) declare @error int --定義一個(gè)變量標(biāo)識(shí)錯(cuò)誤號(hào) update RoomType set rTypeIsDel=1 where rTypeId=@rTypeId --根據(jù)條件刪除房型,rTypeIsDel=1標(biāo)識(shí)刪除,0標(biāo)識(shí)未刪除 set @error+=@@ERROR if(@error<>0) --不等于0說(shuō)明這一句執(zhí)行出現(xiàn)錯(cuò)誤 rollback transaction --事務(wù)回滾 update Room set roomIsDel=1 where rTypeId=@rTypeId --根據(jù)條件刪除房間 set @error+=@@ERROR if(@error<>0) --不等于0說(shuō)明這一句執(zhí)行出現(xiàn)錯(cuò)誤 rollback transaction --事務(wù)回滾 else commit transaction --提交事務(wù)
最后,數(shù)據(jù)層直接調(diào)用存儲(chǔ)過(guò)程的方法即可完成刪除房型的同時(shí)把存在該房型的房間也刪除。
相關(guān)文章
必須會(huì)的SQL語(yǔ)句(八) 數(shù)據(jù)庫(kù)的完整性約束
這篇文章主要介紹了sqlserver中數(shù)據(jù)庫(kù)的完整性約束使用方法,需要的朋友可以參考下2015-01-01
sql2000掛起無(wú)法安裝的問(wèn)題的解決方法
關(guān)于:以前的某個(gè)程序安裝已在安裝計(jì)算機(jī)上創(chuàng)建掛起的文件操作 解決辦法2008-11-11
生成300個(gè)不同的隨機(jī)數(shù)的SQL語(yǔ)句
最近在做一個(gè)項(xiàng)目,涉及到要生成N個(gè)8位的不重復(fù)的純數(shù)字隨機(jī)數(shù)作為優(yōu)惠碼,研究了一番,把結(jié)果分享給大家2014-08-08
SQL Server中Check約束的學(xué)習(xí)教程
這篇文章主要介紹了SQL Server中Check約束的學(xué)習(xí)教程,包括對(duì)啟用Check約束來(lái)提升性能的介紹,需要的朋友可以參考下2015-12-12
SQLSERVER?出現(xiàn)死鎖查找方法和解決辦法(推薦)
這篇文章主要介紹了SQLSERVER?出現(xiàn)死鎖查找方法和解決辦法(推薦),文中講解了查詢死鎖語(yǔ)句,殺死死鎖的解決方法,需要的朋友可以參考下2024-02-02
sqlserver清空service broker中的隊(duì)列的語(yǔ)句分享
在我們開發(fā)service broker應(yīng)用時(shí)候,可能用于測(cè)試或者客戶端沒有配置正確等導(dǎo)致服務(wù)端隊(duì)列存在很多垃圾隊(duì)列,不便于我們排查錯(cuò)誤,我們可以使用SQL腳本來(lái)清空服務(wù)端這些垃圾數(shù)據(jù)2011-08-08

