create trigger TR_Delete_pm_WorkCard
on pm_WorkCard
for delete
as
if @@rowcount=0 return
begin tran
  update pm_PlanEntry
  set FDispatchQty=t4.FDispatchQty - t1.FDispatchQty 
  from deleted as t2 join pm_WorkCardEntry as t1 on(t1.fparentid=t2.FInterID)
       join pm_Plan t3 on(t2.FPlanID=t3.FInterID)
       join pm_PlanEntry as t4 on(t3.FInterID=t4.fparentid and t1.FRowID=t4.FRowID)
if @@error=0 
  commit tran
else
  rollback tran表中字段没有问题,触发器能够执行成功,就是得不到预期的效果。

解决方案 »

  1.   


    通过这个语句
    select *
    from pm_WorkCard as t2 join pm_WorkCardEntry as t1 on(t1.fparentid=t2.FInterID)
           join pm_Plan t3 on(t2.FPlanID=t3.FInterID)
           join pm_PlanEntry as t4 on(t3.FInterID=t4.fparentid and t1.FRowID=t4.FRowID)能得到数据。
      

  2.   

    if @@rowcount=0 return --问题是不是在这里,有用吗?
      

  3.   


    谢谢你,不过应该不是这里,如果把update换成
     update pm_PlanEntry 
      set FDispatchQty=0
    就是正确的,因此问题应该不在那里。
     
      

  4.   


    pm_WorkCard
    你随便取条这个表里面的值,当作你删除的那条,弄个条件,你更新下是不是你的效果???
      

  5.   


    谢谢你帮我分析,我知道原因了,原因是我应该用instead of 触发器,而不应该用delete触发器。