次の列を持つ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
トリガーとストアド プロシージャの両方を使用する必要があるため、トリガーの最後に、列を更新するストアド プロシージャを 1 つ呼び出すことがわかります。
Create proc sp_NewReservationTotalAmount(@newTotalAmount money, @resID)
As
declare @resID int
Update RESERVATIONS set Res_TotalAmount=@newTotalAmount where Reservation_ID=resID
行く
したがって、私の最初の問題は、ほとんどの場合に間違った構文が表示されることです
そして私の 2 つ目 - トリガーとストアド プロシージャの両方を改善する方法を提案していただければ幸いです。