一个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
一个SQLSERVER触发器的示例的更多相关文章
- 一个Oracle触发器的示例
CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder for each row declare ...
- SQLServer触发器创建、删除、修改、查看示例代码
一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发 ...
- SQLServer触发器创建、删除、修改、查看
一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发器 ...
- SQLServer触发器
触发器的作用: 自动化操作,减少了手动操作以及出错的几率. 触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程. [在SQL内部把触发器看做是存储过程但是不能传递参数] 一般的存储过程 ...
- 一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数
js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 Tango<tanwei_yx@126.com> 特性 支持AMD/CMD/Comm ...
- SQLServer 触发器入门
阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析 ...
- 推荐一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数
推荐一个JavaScript触发器插件js-trigger js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 https://tanwei-cc. ...
- SqlServer触发器的理解
SqlServer触发器是与表事件相关的特殊存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发.比如当对一个表进行操作( insert,delete, update)时就会激活它执行. ...
- sqlserver 触发器实例代码
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...
随机推荐
- code::blocks的快捷键汇总
编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销 Ctrl + S:保存 Ctrl + Y / Ctrl + S ...
- C++ Primer : 第十一章 : 关联容器示例: 一个单词转换的map
单词转换就是:将一些缩写的单词转换为实际的文本.第一个文件保存的是转换的规则,而第二个文件保存的是要转换的文本. 假设单词转换的规则的文件如下: brb be right back k okay? y ...
- C++ Primer:第八章:IO库(续)
二:文件输入输出. (1) 使用文件流对象: 头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定的文件中读取数据,ofstream向一个给定的文件中写入数据,以及fstrea ...
- leetcode 127. Word Ladder ----- java
Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest t ...
- leetcode 123. Best Time to Buy and Sell Stock III ----- java
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- 去除包裹的a标签
<div id="test"> <a href="http://www.cnblogs.com">Link 1</a> ...
- 全国信息学奥林匹克联赛(NOIP2014)复赛 模拟题Day2 长乐一中
题目名称 改造二叉树 数字对 交换 英文名称 binary pair swap 输入文件名 binary.in pair.in swap.in 输出文件名 binary.out pair.out sw ...
- php构造函数实例讲解
PHP官网定义: 复制代码 代码如下: 构造函数是类中的一个特殊函数,当使用 new 操作符创建一个类的实例时,构造函数将会自动调用.当函数与类同名时,这个函数将成为构造函数.如果一个类没有构造函数, ...
- IOS开发之SWIFT进阶部分
概述 上一篇文章<iOS开发系列--Swift语言> 中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用 ...
- SharePoint入门识记
SharePoint站点层次结构: 1.Web Application: 一般创建后对应一个IIS Web Site, 默认创建后是打不开的,因为网站没有任何内容. 2.Site Collection ...