• TRIGGER 触发器获得insert, delete, update行的信息


    触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。
    Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。

    Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

    1.插入操作(Insert)
    Inserted表有数据,Deleted表无数据
    2.删除操作(Delete)
    Inserted表无数据,Deleted表有数据
    3.更新操作(Update)
    Inserted表有数据(新数据),Deleted表有数据(旧数据)

    inserted、deleted
    这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。

    if not exists(select 1 from   deleted) 
    begin /*deleted表无记录,是新增*/
    end

    if not exists(select 1 from   inserted) 
    begin /*inserted表无记录,是删除*/
    end

    create trigger   Add_Del_Update  on Table
    for insert,update
    as
    if not exists(select 1 from   deleted) 
    begin /*deleted表无记录,是新增*/
    end

    if not exists(select 1 from   inserted) 
    begin /*inserted表无记录,是删除*/
    end

    else
    begin /*是更新*/ end
    go

    eg:

    create trigger   Add_Del_Update  on tab1
    for insert,update,delete
    as
    if not exists(select 1 from   deleted) 
    begin /*deleted表无记录,是新增*/
        insert into tab2(dp,st)
        select dp,st from inserted
    end

    if not exists(select 1 from   inserted) 
    begin /*inserted表无记录,是删除*/
      delete from tab2 where id in(select id from deleted)
    end

    else
    begin /*是更新*/
        update tab2 set tab2.dp=inserted.dp,tab2.st=inserted.st
        from tab2,inserted where tab2.id=inserted.id
    end

  • 相关阅读:
    BUUCTF-[GYCTF2020]Blacklist 1 思路
    [强网杯 2019]随便注 WriteUp(three way)思路
    [GXYCTF2019]Ping Ping Ping 1思路
    [ACTF2020 新生赛]Include 思路
    [极客大挑战 2019]Secret File 思路
    [SUCTF 2019]EasySQL 思路
    java环境变量配置 详细
    [极客大挑战 2019]Upload 思路
    [极客大挑战 2019]Http 思路
    [ACTF2020 新生赛]Exec 思路
  • 原文地址:https://www.cnblogs.com/cnaspnet/p/1592198.html
Copyright © 2020-2023  润新知