2013-09-29 97 views
0

我有這些表後存儲過程使INSERT,UPDATE,其他表觸發

  • Tourist_ID-外鍵
  • Reservation_ID - 外鍵的訂房

Extra_Charges

  • Extra_Charge_ID
  • 金額
  • 說明

Tourist_Extra_Charges

  • Tourist_ID - 外鍵
  • Extra_Charge_ID - 外鍵

但是,當一個用戶在第一次進行預約 - 例如,基本包費用500歐元 - 它被插入Reservation表中的TotalAmount列。

但是,在下一個表格中,用戶可以選擇extra_charges哪個(但他也可以不選擇任何extra_charges),它們立即插入Tourist_Extra_charges表中。

問題是,由於用戶選擇extra_charges,我應該更新列TotalAMount。

因此,在插入tourist_extra_charges表後,我想創建一個觸發器,它將更新Reservation表中的列TotalAmount。這就是我想出的。 如果我可以優化它,並且整個過程良好,請指教我。

CREATE TRIGGER [dbo].[tralAmount] on [dbo].[TOURIST_EXTRA_CHARGES] After Insert 
AS 
BEGIN 
Declare @Res_ID int 
Declare @Sum_toAdd money 
    select @Res_ID = Reservation_ID from inserted 
    Inner join TOURIST_RESERVATION on inserted.Tourist_ID=TOURIST_RESERVATION.Tourist_ID 

    select @Sum_toAdd = Amout from inserted 
    Inner Join EXTRA_CHARGES on inserted.Extra_Charge_ID= EXTRA_CHARGES.Extra_Charge_ID 

    Update RESERVATIONS 
    Set Reservation_TotalAmount = (Reservation_TotalAmount + @Sum_toAdd) 
    where [email protected]_ID 
    END 

回答

2

你需要考慮的很重要的事情是,插入表可能有比它的單個記錄,在這種情況下,你想你的實現將無法正常工作了。例如,如果您有批量更新,則會發生這種情況。

解決此問題的兩種方法 - 您可以重寫您的觸發器以執行INSERTED和額外費用之間的聯接更新;還要注意,你也需要爲UPDATE實現這個觸發器,以確保值是正確的(並考慮刪除)。

或者,您可以創建一個視圖,將兩個表中的值相加,以便爲每個預留提供一個總計。然後,只要您需要總計用戶界面/報告,就可以加入此視圖。

選項2是我一般傾向於選擇的選項,因爲它很難打破。