zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    B-Suffix Array
    1 or 2
    Boundary
    Fake Maxpooling
    Cover the Tree
    Omkar and Circle
    20.5.31
    Yet Another Yet Another Task
    Codeforces Round #373 (Div. 2)E. Sasha and Array +线段树+矩阵快速幂
    2018 Multi-University Training Contest 2(Naive Operations ) hdu6315
  • 原文地址:https://www.cnblogs.com/cnaspnet/p/1592198.html
Copyright © 2011-2022 走看看