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

  

一个SQLSERVER触发器的示例的更多相关文章

  1. 一个Oracle触发器的示例

    CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder for each row declare ...

  2. SQLServer触发器创建、删除、修改、查看示例代码

    一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束.  二: SQL Server为每个触发 ...

  3. SQLServer触发器创建、删除、修改、查看

    一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发器 ...

  4. SQLServer触发器

    触发器的作用: 自动化操作,减少了手动操作以及出错的几率. 触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程. [在SQL内部把触发器看做是存储过程但是不能传递参数] 一般的存储过程 ...

  5. 一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数

    js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 Tango<tanwei_yx@126.com> 特性 支持AMD/CMD/Comm ...

  6. SQLServer 触发器入门

    阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析 ...

  7. 推荐一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数

    推荐一个JavaScript触发器插件js-trigger js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 https://tanwei-cc. ...

  8. SqlServer触发器的理解

    SqlServer触发器是与表事件相关的特殊存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发.比如当对一个表进行操作( insert,delete, update)时就会激活它执行. ...

  9. sqlserver 触发器实例代码

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...

随机推荐

  1. 2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  2. java List 排序 Collections.sort()

    用Collections.sort方法对list排序有两种方法  第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class ...

  3. canvas绘图动画细节

    1.canvas动画不能像操作DOM那样修改一个元素的top和left值就能移动.canvas要移动一个元素需要重绘,在重绘的时候修改相应的值.将绘制的图形封装成一个函数,这样才方便重绘.2.在重绘的 ...

  4. ExtJS布局方式(layout)图文详解

    Auto默认布局 不给下级组件指定大小和位置 Absolute绝对布局 可使用坐标(x.y)进行布局 Accordion手风琴布局 实现Accordion效果的布局,也可叫可折叠布局.也就是说使用该布 ...

  5. (转) Quick Guide to Build a Recommendation Engine in Python

    本文转自:http://www.analyticsvidhya.com/blog/2016/06/quick-guide-build-recommendation-engine-python/ Int ...

  6. jfinal对象封装Record原理

    /*DbPro.class*/ public transient Record findFirst(String sql, Object paras[]{ List result = find(sql ...

  7. JSBinding + SharpKit / 实战:转换 Stealth

    这个例子相对简单,基本上一路顺畅 // JSBindingSettings.classes public static Type[] classes = new Type[] { typeof(Per ...

  8. Nginx-缓冲原理及优化

    一.作用及原理 作用: 使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻.当代理到另一台 ...

  9. Integer.parseInt()和Integer.valueOf()有什么区别

    jdk的源代码的时候注意到Integer.parseInt(s) 和 Integer.valueOf(s)的具体代码的实现有所区别: Java代码 public static int parseInt ...

  10. morris.js 简单学习

    需要添加的引用脚本 <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js&qu ...