Как создать триггер, который обновляет 1 столбец, а затем обновляется другой столбец? - PullRequest
1 голос
/ 01 апреля 2019

Я запутался, что Как создать триггер, когда я обновляю 1 столбец, остальные столбцы тоже обновляются [все столбцы находятся в одной таблице]

Это моя таблица

create table VIP( 
    VipID                int identity (10001,1)  not null, 
    PackageID            Char(10) not null, 
    Vip_Expire           Date     null,
    DateofTransaction    date     null, 
constraint VIP_PK primary key(VipID), 
constraint VIP_FK1 foreign key(MemberID)  
  references MEMBER(MemberID), 
constraint VIP_FK2 foreign key(PackageID)   
  references Package(PackageID)

Мне нужно обновить PackageID, затем

1.DateofTransaction - это день, когда вы обновляете
2.Vip_expire - это день, когда вы обновляете + Packagedays [Данные в PackageTable]

Я пытаюсьиспользовать этот код в моем триггере и попытаться обновить его следующим образом.

TRIGGER

create trigger VIP_UPDATE on VIP
after update
.
.
.
select packagedays
from package
where @packagedays = packagedays 
    update vip
    set PackageId = @newpackage,
        Dateoftransaction = CONVERT (date, GETDATE()),
        Vip_Expire = dateadd(day, @packagedays, CONVERT (date, GETDATE()))
    where PackageID = @oldPackage and
          Vip_expire = @OldVip_expire and
          Dateoftransaction = @OldDateT

ДЛЯ ПРИМЕРА enter image description here

Мне нужнообновите PackageID с «1002» до «1003», у которого «1003» имеет 120 дней [VIPID 10001]

, поэтому должен быть результат: VIPID 10001 MEMBERID 620000 PackageID 1003 VipExpire 2019-08-01 DateofTransaction 2019-04-03

1 Ответ

0 голосов
/ 01 апреля 2019

Я думаю, вам нужно что-то вроде этого:

create trigger VIP_UPDATE
after update on VIP
for each row
begin
  if (new.PackageID <> old.PackageID) then
    set new.DateofTransaction = current_date();
    set new.Vip_Expire = (
        select current_date() + interval p.Packagedays day
        from Package p
        where p.PackageID = new.PackageID
    );
  end if;
end

Когда вы хотите изменить столбцы из той же строки, которая обновляется, вы не пишете инструкцию UPDATE в триггере.Вы просто устанавливаете NEW.column_name на новое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...