• 触发器 Insert Delete Update


    Inserted Deleted为临时表,驻留在内存中

    当对某张表建立触发器后,分3种情况讨论
    1.插入操作(Insert)
    Inserted表有数据,Deleted表无数据
    2.删除操作(Delete)
    Inserted表无数据,Deleted表有数据
    3.更新操作(Update)

    Inserted表有数据(新数据),Deleted表有数据(旧数据)

    对行记录的判断应该用到Inserted表和Deleted表

    ps:对列更新操作的判断的两个函数COLUMNS_UPDATED()UPDATE(列名)

    UPDATE(列名)是为了判断单一列是否被INSERT或是UPDATE语句修改过,返回true或false

    COLUMNS_UPDATED()是对多个列是否被INSERT或是UPDATE语句修改的判断,返回的是位掩码,读取的顺序是从左到右,和一般的二进制读取顺序正好相反

    eg:

    对Order_Details表中的Quantity和UnitPrice做检测是否被修改

    CREATE TRIGGER tr_OrderDetails ON [Order_Details] AFTER UPDATE
    AS
    IF (COLUMNS_UPDATED() = 12)
    BEGIN
    RAISERROR (''''Cannot change both UnitPrice and Quantity at the
    same time'''', 16, 1)
    ROLLBACK TRAN
    END
    GO

    拿Order_Details表来说,COLUMN_UPDATED功能返回代表Order_Details表中字段的五个字节。只要第三和第四个字段被修改,上面这种情况就会发生,它检测这些位是不是已赋值为1.当第三和第四位都修改的话,它就如:00110。因这个位掩码代表2次幂,第一位表示1,第二位表示2,第三位表示4,第四位表示8,第五位表示16(是的,这是和正常二进制数相反的顺序);因此只表示UnitPrice和Quantity字段被修改位掩码的值为00110,这个值为12(4+8)。

    ps,这个Order_Details表共有5个字段,Quantity和UnitPrice分别在第三位和第四位

  • 相关阅读:
    Mvc model验证总结
    ArchSummit全球架构师峰会2017年深圳站 漫谈
    hiredis aeStop仅在redis命令的回调函数中生效 分析
    MirrorNetwork 基于jmdns和netty的android网络通信开源库
    pigeon物联网平台- developer portal web服务设计及实现
    物联网 command 原型设计及框架
    alljoyn:基于java动态代理的RPC实现原理分析
    IOT command (based on sip)client API设计 for java
    gateway & data management
    openhab入门介绍
  • 原文地址:https://www.cnblogs.com/zqstc/p/1605919.html
Copyright © 2020-2023  润新知