• PCB SQL Server 触发器应用实例


    这里以实际例子对触发器的应用对触发器的理解与应用来得更实际

    一.更新触发器(Update)

           临时表:inserted表有数据(新数据)     Deleted表有数据(旧数据)

         实例说明:当表更新时,并检测到更新了交期与数量字段,并连表更新另外一张表的数据(交期与数量),同时对历史更新的数据进行备份

    -- =======================================================
    -- 触发器概述:更新  交期与数量
    -- ========================================================
    CREATE   TRIGGER [dbo].[mktdelivery_update] ON [dbo].[mktdelivery]
    FOR UPDATE 
    AS 
        if (update(deldate) OR update(delqty))
        BEGIN
            UPDATE aa SET aa.okdate = bb.deldate,aa.qty = bb.delqty
            FROM mkthtpsb aa INNER JOIN INSERTED bb ON aa.cno = bb.shipway AND  aa.pdctno = bb.pdctno
            
            INSERT  mkthtpsb_back(ID,cno,okdate,pdctno,qty,addr)
            SELECT  ID,cno,deldate,pdctno,delqty,HOST_NAME() FROM  Deleted
        END    


     

    二.插入触发器(Insert)

            临时表:Inserted表有数据,   Deleted表无数据

            实例说明:当插入记录时,插入的数据会记录在Inserted表中,拿到订单类型是否时,并更新另外一个表的数据(交期与数量)

    -- =========================================================
    -- 触发器概述:插入  更新(交期与数量)    NP单更新产地确认  
    -- ========================================================
    ALTER   TRIGGER [dbo].[mktdelivery_insert] ON [dbo].[mktdelivery] 
    FOR INSERT 
    AS
       DECLARE @isnewpdctno VARCHAR(10)
       DECLARE @cno VARCHAR(20)
       DECLARE @deldate DATETIME 
       DECLARE @delqty INT 
       SELECT @isnewpdctno = isnewpdctno,@cno = shipway,@deldate=deldate,@delqty=delqty FROM INSERTED
       IF (@isnewpdctno IN ('') )
           BEGIN
               UPDATE aa SET aa.FactoryConfirmDate = GETDATE(),aa.okdate = @deldate,aa.qty = @delqty
               FROM  mkthtpsb aa
               WHERE cno = @cno AND isnewpdctno IN ('')
           END
    

    三.删除触发器(Deleted)

            临时表:Inserted表无数据,Deleted表有数据

            实例说明:当删除记录时,删除的数据会记录在Deleted表中,在删除前对关键数据进行备份

    -- =======================================================
    -- 触发器概述:删除数据  对关键数据进行备份记录
    -- ========================================================
    ALTER TRIGGER [dbo].[mkthtpsb_del]  on [fp_db].[dbo].[mkthtpsb] 
    FOR DELETE 
      AS 
    INSERT  mkthtpsb_back(ID,cno,getdate,okdate,pdctno,custpno,qty,addr)
    SELECT  ID,cno,[getdate],okdate,pdctno,custpno,qty,HOST_NAME() FROM  Deleted


     

  • 相关阅读:
    【转载】常见的Web攻击手段之XSS攻击讲解及实战
    【转载】常见的Web攻击手段之CSRF攻击
    【转载】Ognl表达式基本原理和使用方法(最全最详细附带源码解读)
    linux(centos7)安装jdk8--附带oracle账号
    Vagrant+Secure CRT的使用
    Idea 如何解决项目依赖冲突
    全局唯一iD的生成 雪花算法详解及其他用法
    【转载】什么是java OOM?如何分析及解决oom问题?
    FastJSON的0day漏洞报告
    MySQL/Oracle 添加/查看表注释和字段注释
  • 原文地址:https://www.cnblogs.com/pcbren/p/9548328.html
Copyright © 2020-2023  润新知