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
    

      

  • 相关阅读:
    OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
    用runtime来重写Coder和deCode方法 归档解档的时候使用
    Homebrew安装卸载
    Cannot create a new pixel buffer adaptor with an asset writer input that has already started writing'
    OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播
    让nginx支持HLS
    iOS 字典转json字符串
    iOS 七牛多张图片上传
    iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them
    Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
  • 原文地址:https://www.cnblogs.com/gsk99/p/4763442.html
Copyright © 2011-2022 走看看