我很困惑如何在更新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
我需要将PackageID从'1002'更新为'1003' '1003'具有120天[VIPID 10001]
所以应该是 VIPID 10001 会员编号620000 包ID 1003 VipExpire 2019-08-01 交易日期2019-04-03
答案 0 :(得分:0)
我认为您需要这样的东西:
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
设置为新值。