zoukankan      html  css  js  c++  java
  • 触发器 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分别在第三位和第四位

  • 相关阅读:
    4.23Java自定义链表最终封装与完善
    4.23Java vector向量
    托管与非托管
    关于C#中的DLLImport (引)
    C#中通过DllImport使用 Win32 API(引)
    ASP.Net HttpHandler (转)
    C#WinForm获取本机网卡的型号,IP地址,子网掩码和网关
    ManagementObject
    asp.net Session详解(再转)
    C#优化字符串操作(引)
  • 原文地址:https://www.cnblogs.com/zqstc/p/1605919.html
Copyright © 2011-2022 走看看