我有一个Reservations
包含以下列的表格
Reservation_ID
Res_TotalAmount - money
Res_StartDate - datetime
IsDeleted - bit
具有默认值的列 - false
因此,当用户尝试删除他的预订时,我创建了一个触发器,而不是删除 - 他只是将列的值更新IsDelete
为 true;
到目前为止一切顺利 - 但这位游客可能欠公司一些补偿,例如,当他在预订后 30 天到 20 天取消start_date
预订时 - 他欠 30% 的Res_TotalAmount
等等
这是我的触发器
Create Trigger tr_TotalAMountUpdateAfterInsert on RESERVATIONS after Delete
As
Begin
Declare @period int
Declare @oldResAmount int
Declare @newAmount money
Declare @resID int
Select @resID = Reservation_ID from deleted
select @oldResAmount = Res_TotalAmount from deleted
Select @period= datediff (day,Res_StartDate,GETDATE()) from deleted
case
@period is between 30 and 20 then @newAmount=30%*@oldResAmount
@period is between 20 and 10 then @newAmount=50%*@oldResAmount
end
exec sp_NewReservationTotalAmount @newAmount @resID
End
GO
由于我必须同时使用触发器和存储过程,您会看到我在触发器结束时调用了一个仅更新Res_TotalAmount
列的存储过程
Create proc sp_NewReservationTotalAmount(@newTotalAmount money, @resID)
As
declare @resID int
Update RESERVATIONS set Res_TotalAmount=@newTotalAmount where Reservation_ID=resID
去
所以我的第一个问题是它在大小写附近给了我不正确的语法
我的第二个 - 我会很感激有关如何使触发器和存储过程更好的建议。