触发器--里面涉及触发器调存储过程

if (object_id(‘TR_EMP_CHANGE_USRA91‘, ‘TR‘) is not null)
    drop trigger TR_EMP_CHANGE_USRA91
go
create trigger TR_EMP_CHANGE_USRA91
on USRA91
AFTER DELETE,INSERT,UPDATE
AS
DECLARE
  @strSQL   varchar(1000),
  @outappId varchar(100),
  @A0100    varchar(30),
  @syncFlag char(1),
  @unit     varchar(30),
  @dept     varchar(30),
  @post     varchar(30),
  @jz_str   varchar(300),
  @syncKey  varchar(100),
  @MaxI9999 integer,
  @A91A2    varchar(100),--add by fangkun
  @I9999    integer
IF NOT EXISTS(SELECT 1 FROM DELETED) OR NOT EXISTS(SELECT 1 FROM INSERTED) OR UPDATE(A91A2) OR UPDATE(A91AA) OR UPDATE(A91A9) OR UPDATE(A91A4) OR UPDATE(I9999)
BEGIN
  IF EXISTS(SELECT 1 FROM INSERTED)
    DECLARE C_USRA91 CURSOR FOR SELECT A0100,I9999 FROM INSERTED
  ELSE
    DECLARE C_USRA91 CURSOR FOR SELECT A0100,I9999 FROM DELETED
  OPEN C_USRA91
  FETCH NEXT FROM C_USRA91 INTO @A0100,@I9999
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    SET @jz_str=‘‘
    SET @syncFlag=0
    SELECT @syncKey = GUIDKEY FROM UsrA01 WHERE [email protected]
  IF((select count(*) from inserted a inner join deleted b on a.A0100 = b.A0100 and  a.I9999 = b.I9999  and ((a.A91A2 is null and b.A91A2 is null) or (a.A91A2 =b.A91A2)) and ((a.A91AA is null and b.A91AA is null) or (a.A91AA =b.A91AA)) and ((a.A91A9 is null and b.A91A9 is null) or (a.A91A9 =b.A91A9)) and ((a.A91A4 is null and b.A91A4 is null) or (a.A91A4 =b.A91A4)))=0)
    BEGIN
    DECLARE c_jz CURSOR FOR SELECT A91A2,A91AA,A91A9,A91A4 FROM USRA91 WHERE [email protected] and A91A7=‘0‘ order by i9999;
    OPEN c_jz;
    FETCH NEXT FROM c_jz INTO @A91A2,@unit,@dept,@post
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
      IF LEN(@jz_str) >0 AND ISNULL(@unit,‘‘) <>‘‘ AND ISNULL(@dept,‘‘)<>‘‘ AND ISNULL(@post,‘‘)<>‘‘ AND ISNULL(@A91A2,‘‘)<>‘‘
        SET @jz_str = @jz_str + ‘;‘ [email protected]+ ‘@‘+ @unit + ‘@‘ + @dept + ‘@‘ + @post
      ELSE IF ISNULL(@unit,‘‘) <>‘‘ AND ISNULL(@dept,‘‘)<>‘‘ AND ISNULL(@post,‘‘)<>‘‘ AND ISNULL(@A91A2,‘‘)<>‘‘
        SET @jz_str = @A91A2+ ‘@‘+ @unit + ‘@‘ + @dept + ‘@‘ + @post
      FETCH NEXT FROM c_jz INTO @A91A2,@unit,@dept,@post
    END;
    CLOSE c_jz;
    DEALLOCATE c_jz;
    IF EXISTS(SELECT 1 FROM t_hr_view WHERE [email protected])
    BEGIN
      UPDATE t_hr_view SET H01ST = @jz_str,sdate = GETDATE() WHERE [email protected];
      SET @syncFlag=2;
    END;
    IF @syncFlag=2
      EXEC PR_UP_SYNC_FLAG @syncFlag,‘‘,@syncKey,‘USR‘,‘A_‘
END
    FETCH NEXT FROM C_USRA91 INTO @A0100,@I9999
  END
  CLOSE C_USRA91
  DEALLOCATE C_USRA91
END

时间: 2024-07-31 07:50:13

触发器--里面涉及触发器调存储过程的相关文章

[SQL]触发器入门介绍——特殊的存储过程

触发器是一种特殊类型的存储过程,它的功能是在指定的表中的数据发生变化时自动生效. 触发器与普通存储过程的不同之处在于--触发器的执行时由事件触发,而普通存储过程是由命令调用执行(EXEC) SQL Server主要提供了一下两种触发器 1)DML触发器 2)DLL触发器 当数据库中发生数据操作语言DML事件的时候即执行DML触发器.DLL触发器是SQL Server 2005以后新增的触发器类型,它在响应数据定义语言DDL时触发. 主要讲解DML触发器,又分为三种: 1)AFTER触发器,故名思

SQL语句(二十一)—— 触发器(DML触发器)

触发器 一 .触发器概述(特殊的存储过程) 定义: 在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用. 作用: 实现由主键和外键所不能保证的复制的参照完整性和数据的一致性 他能够对数据库中的相关表进行级联修改 提供比 CHECK约束 更复杂的数据完整性,并自定义错误信息. 分类: 数据操作语言触发器 DML 数据库操作语言 : update,Delete 数据定义语言触发器 DDL 记录数据库更改事件 二.创

如何屏蔽触发器和恢复触发器

原文:如何屏蔽触发器和恢复触发器 禁用:  ALTER  TABLE  trig_example  DISABLE  TRIGGER  trig1  GO  恢复:  ALTER  TABLE  trig_example  ENABLE  TRIGGER  trig1  GO   ---------------------------------------------------------------   --禁用某个表上的所有触发器  ALTER  TABLE  你的表  DISABLE

触发器七(复合触发器)(学习笔记)

复合触发器 复合触发器是在Oracle 11g之后引入进来的一种新结构的触发器,复合触发器既是表级触发器又是行级触发器.在之前针对于不同级别的触发器,如果要在一张数据表上完成表级触发(BEFORE和AFTER)与行级触发(BEFORE和AFTER)则需要编写四个触发器才可以完成,而有了复合触发器之后,只需要一个触发器就可以定义完全部的四个功能 使用复合触发器可以捕获四个操作事件: 触发执行语句之前(BEFORE STATEMENT) 触发语句中的每一行发生变化之前(BEFORE EACH ROW

Mysql数据库的触发器、存储引擎和存储过程

数据库的触发器 1.触发器 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句): DELETE,INSERT,UPDATE 我们可以监视某表的变化,当发生某种变化时,触发某个操作. 能监视:增,删,改 触发操作:增,删,改 2.触发器应用场景: 1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作.比如,当一个订单产生时,订单所购的商品的库存量相应减少. 2.当表上某列数据的值与其他表中的数据有联系时.比如,当某客户进行欠款消费

mysql重点、视图、事务、备份还原【mysqldump】、mysql编程【触发器、存储函数、存储过程】、存储引擎

1.删除数据需要注意的问题[删除记录delete] 删除数据本身没有太多说的,还是删除表的时候有truncate用法 delete from是逐条删除记录[加不加条件全删,效率低,在删除表方面] truncate是重建表[删除表时效率高] 2.修改数据[update] [一下重点性能] 3.视图(view)[是一张虚拟的表:使客户端在虚拟的表中进行操作] 视图就是一条查询语句的结果[因为查询之后的结果本身就会形成一张表给客户端][视图使用到mysql的内置机制] create view 视图名

SQL Server 触发器、事务、以及存储过程详解

触发器(trigger) 在使用触发器的同时一般会牵扯到两张表,这两张表只读且是虚拟的表一个是inserted(增加表)另外一个是deleted(删除表) 这两张表的结果总是与被改触发器应用的表的结构相同.当触发器完工后,这两张表就会被删除inseted是存插入和修改的数据,deleted则是存储 删除的的数据 语法:  create  trigger  tgr_name(触发器名称) on table_name(表名) with encrypion  --加密触发器 for  update(i

触发器六(系统触发器)(学习笔记)

系统触发器 系统触发器用于监视数据库服务的打开.关闭.错误等信息的取得,或者是监控用户的行为操作等.如果要创建系统触发器,可以使用如下的语法 CREATE [OR REPLACE] TRIGGER 触发器名称 [BEFORE | AFTER] [数据库事件] ON [DATABASE | SCHEMA] [WHEN 触发条件] [DECLARE] [程序声明部分 ;] BEGIN 程序代码部分 ; END [触发器名称] ; 使用管理员才可以创建系统触发器 系统触发器事件 NO. 事件 触发时机

Oracle触发器-变异表触发器不能访问本表

1 CREATE OR REPLACE TRIGGER trgregisterpregroup 2 AFTER UPDATE 3 ON tblregisterusers 4 FOR EACH ROW 5 -- 6 END trgregisterpregroup; 对表tblregisterusers创建了触发器,这属于行级的触发器,可以有:OLD和;NEW数据 但是,不能再对变异表进行select操作,不然就会报异常 原因: 当对一个表创建行级触发器时,有下列两条限制: 1.不能读取或修改任何触