zoukankan      html  css  js  c++  java
  • 一个SQLSERVER触发器的示例

    CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATE
    AS 
    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
    	end
    
    END
    

      

  • 相关阅读:
    [CTF]zip伪加密
    Node.js躬行记(5)——定时任务的调试
    不一样的资产安全 3D 可视化平台
    冬季里有温度的 3D 可视化智慧供热系统
    公路项目建设可视化进度管理
    ElementUI时间选择控件提交的时间为UTC时间
    Orcal创建触发器
    Orcal常用查询实例集合
    代码优化风格分享
    查某月的天数
  • 原文地址:https://www.cnblogs.com/gsk99/p/4763442.html
Copyright © 2011-2022 走看看