一个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 ...
 
随机推荐
- N Sum
			
题目:N Sum 描述: Given an array of integers, return indices of the two numbers such that they add up to ...
 - 信頼済みサイト对window.open窗体大小影响原因之一
			
如果某站点被添加进去之后,这个站点窗体限制被决定了,window.open里面,status bar 无效的设置不再起作用.而且,如果原来status bar被 任务栏挡住的话,这个时候它就会被显示出 ...
 - hiho一下115周 网络流
			
小Hi和小Ho住在P市,P市是一个很大很大的城市,所以也面临着一个大城市都会遇到的问题:交通拥挤. 小Ho:每到周末回家感觉堵车都是一种煎熬啊. 小Hi:平时交通也还好,只是一到上下班的高峰期就会比较 ...
 - thinkPHP 中去除URL中的index.php
			
例如你的原路径是 http://localhost/app/index.php/module/action/var/value/ 那么现在的地址是 http://localhost/app/modul ...
 - Oracle数据库五种约束
			
oracle 数据库 数据表的5个约束类型:1.主键约束2.外键约束3.唯一约束4.检查约束5.非空约束 主键约束:用来唯一标示表中的一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包含 ...
 - C++@类对象和类指针的区别(转)
			
原文地址不详 如下程序: #include <iostream> #include <string> using namespace std; class Student { ...
 - eclipse使用jetty插件出现内存溢出解决方案
			
系统运行在MAVEN中的jetty插件下,当在ECLIPSE运 clean jetty:run时系统提示 OutOfMemoryError: PermGen space. 解决办法:设置run as ...
 - caffe: compile error:  Could not open or find file your path~~/resized_data/0  and a total of 2 images .
			
I0219 14:48:40.965386 31108 net.cpp:76] Memory required for data: 0I0219 14:48:40.965517 31108 layer ...
 - JDBC getMetaData将结果集组装到List
			
transient List query(Config config, Connection conn, String sql, Object paras[]) throws SQLException ...
 - postgreSQL 时间线
			
“时间线”(Timeline)是PG一个很有特色的概念,在备份恢复方面的文档里面时有出现.但针对这个概念的详细解释却很少,也让人不太好理解,我们在此仔细解析一下. 时间线的引入 为了理解引入时间线的背 ...