我有这些表:
预订
Tourist_Reservation
Extra_Charges 表
Tourist_Extra_Charges
但是,当用户首先进行预订时 - 例如,基本数据包需要500欧元 -
它被插入TotalAmount
表中的Reservation
列。
但是在下一种形式中,用户可以选择extra_charges
,它将立即插入extra_charges
表中,但也可以选择Tourist_Extra_charges
}。
问题在于,当用户选择了extra_charges时,我应该更新TotalAMount列。
因此,在tourist_extra_charges
表中插入后,我想创建一个触发器来更新TotalAmount
表中的列Reservation
。这就是我想出来的。
如果我可以优化它,如果程序良好,请建议我。
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 Reservation_ID=@Res_ID
END
答案 0 :(得分:2)
您需要考虑的重要事项是INSERTED表中可能包含多条记录,在这种情况下,您的实现将无法按预期运行。例如,如果您有批量更新,则会发生这种情况。
解决此问题的两种方法 - 您可以重写触发器以在INSERTED和额外费用之间的联接中进行更新;另请注意,您还需要为UPDATE实现此触发器,以确保值正确(并考虑删除)。
或者,您可以创建一个视图,该视图将两个表中的值相加,以便为每个预留提供一个总计。然后,只要您需要UI /报告的总数,就可以加入此视图。
选项2是我通常倾向于选择的选项,因为它更难以打破。