这里有两个名为 usermaster
和 userdetails
的不同表格。我想要做的是,在插入后在表usermaster上创建一个触发器,在这个触发器中,我想更新同一个表而不是另一行。
BEGIN
Declare UserCode varchar(50);
Declare BasePlan,CurrentPlan decimal(10,4);
Declare BaseDate,CurrentDate datetime;
Set UserCode=Trim(new.us_usercode);
Select ap.ap_planCost,us.us_edtm into BasePlan,BaseDate
from us_uxusermaster us inner join cm_clientmaster cm inner join pl_planlist pl inner join ap_affiliateplan ap
on us.us_usercode=cm.cm_affiliatecode and pl.pl_id=us.us_planListId and pl.pl_ap_id=ap.ap_id where cm.cm_usercode=UserCode;
Select ap.ap_planCost,us.us_edtm into CurrentPlan,CurrentDate
from us_uxusermaster us inner join pl_planlist pl inner join ap_affiliateplan ap on pl.pl_id=us.us_planListId and pl.pl_ap_id=ap.ap_id where us.us_usercode=UserCode;
if(CurrentPlan>=BasePlan)
Then
If(DateDiff(BaseDate,CurrentDate)<=30)
Then
Update us_uxusermaster set us_eby='update' where us_usercode=(Select cm.cm_affiliatecode from cm_clientmaster cm where cm.cm_usercode=UserCode);
End If;
End If;
END
但每次我这样做都会给我一个错误,我无法使用同一个表进行更新。
所以我在插入 usermaster
后首先创建了两个触发器,在此触发器中,它更新表 userdetails
以及另外一个更新表格 userdetails
后触发更新表 usermaster
。
这种机制是正确的还是存在更好的任何其他解决方案。
答案 0 :(得分:1)
您无法在触发器中修改同一个表格,这是documentation所说的内容:
存储的函数或触发器无法修改已经存在的表 被调用的语句用于(读或写) 功能或触发器。
此外,您似乎在usermaster
和userdetails
表之间存在循环依赖(通过触发器),我强烈建议您远离这些表。另一种方法是在事务中执行这些更新(来自应用程序)。