程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> MSSQL事務的存儲過程,MSSQL事務存儲過程

MSSQL事務的存儲過程,MSSQL事務存儲過程

編輯:更多數據庫知識

MSSQL事務的存儲過程,MSSQL事務存儲過程


在酒店管理系統開發中,我們會創建房間表和房間類型表(房型表)這兩個表,如下圖所示:

房型表: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 --提交事務

最後,數據層直接調用存儲過程的方法即可完成刪除房型的同時把存在該房型的房間也刪除。


SQL 存儲過程與事務問題

事務格式
CREATE PROCEDURE PRO_NAME(
P1 NVARCHAR(10)
P2 INT
)
AS
BEGIN TRANSACTION --開始事務
SQL 語句
IF @@ERROR<>0 --有錯誤
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
 

MSSQL存儲過程的問題

存儲過程本來就是個事務。
如果你要更新固定表的話,很難避免並行時 鎖表

但你可以在你的過程中用臨時表來操作。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved