CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATEAS BEGIN declare @WorkOrderID varchar(20), @PlanID varchar(10), @WoState_New varchar(10), @WoState_Old varchar(10), @PlanState varchar(10), @WoRunCnt int select @WorkOrderID=WorkOrderID,@PlanID=PlanID,@WoState_New=WOState from inserted select @WorkOrderID=WorkOrderID,@PlanID=PlanID,@WoState_Old=WOState from deleted --计划状态 select @PlanState=PlanState from T_PD_Plan where PlanID=@PlanID --1 工单: 锁定1 -> 下载完毕2 if(@WoState_Old='1' and @WoState_New='2') begin if(@PlanState='1') begin --计划状态由 制定1 变为 下载3 update T_PD_Plan SET PlanState='3' where PlanID=@PlanID end end--2 工单: 下载完毕2 -> 执行3 else if(@WoState_Old='2' and @WoState_New='3') begin if(@PlanState='3') begin --计划状态由 下载3 变为 执行4 update T_PD_Plan SET PlanState='4',FactStartTime=GETDATE() where PlanID=@PlanID end end--3 工单: 执行3 -> 完成4 else if(@WoState_Old='3' and @WoState_New='4') begin select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='1' or WOState='2' or WOState='3') --计划状态由 执行4 变为 完成5 if(@PlanState='4' and @WoRunCnt=0) begin update T_PD_Plan SET PlanState='5',FactEndTime=GETDATE() where PlanID=@PlanID end end--4 工单: 锁定1或下载完成2 -> 废弃5 else if((@WoState_Old='1' or @WoState_Old='2') and @WoState_New='5') begin select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='1' or WOState='2' or WOState='3') if(@PlanState='4' and @WoRunCnt=0) begin --计划状态由 执行4 变为 完成5 update T_PD_Plan SET PlanState='5',FactEndTime=GETDATE() where PlanID=@PlanID end end--5 工单: 下载完成2 -> 锁定1 else if(@WoState_Old='2' and @WoState_New='1') begin --获取工单 执行 或 完成 的数量 select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='3' or WOState='4') if(@WoRunCnt=0) begin --计划没有对应执行或完成的工单,清空计划开始和结束时间 update T_PD_Plan SET PlanState='3',FactStartTime=null,FactEndTime=null where PlanID=@PlanID end --获取工单 执行 或 完成 的数量 select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='3' or WOState='4' or WOState='2') if(@WoRunCnt=0) begin --没有 下载完毕2,运行3,完成4 的工单,计划变为 制定1状态 update T_PD_Plan SET PlanState='1' where PlanID=@PlanID end endEND