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
    

      

  • 相关阅读:
    NetScaler ‘Counters’ Grab-Bag!
    NetScaler + Wireshark = A Perfect Combination!
    What’s That NetScaler Reset Packet?
    Give NetScaler a “Tune-Up”
    51Nod 1080 两个数的平方和(数论,经典题)
    51Nod 1289 大鱼吃小鱼(模拟,经典好题)
    1082 与7无关的数(思维题,巨坑)
    51Nod 1003 阶乘后面0的数量(数学,思维题)
    2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
    后缀数组(一堆干货)
  • 原文地址:https://www.cnblogs.com/gsk99/p/4763442.html
Copyright © 2011-2022 走看看