• 通过视图更新数据


    -示例
    
    --测试数据
    create table 表1(ID int identity(1,1),A varchar(10),B varchar(10),C varchar(10),D varchar(10)
    ,CONSTRAINT idx_表1_a UNIQUE(a))
    insert 表1 select 'a', 'b','c','d'
    union  all select 'a2','b','c','d2'
    union  all select 'a3','c','b','a'
    
    create table 表2(ID int identity(1,1),E varchar(10),A varchar(10),F varchar(10),G varchar(10)
    ,CONSTRAINT idx_表2_a UNIQUE(a))
    insert 表2 select 'm','a' ,'w','q'
    union  all select 'x','a2','p','k'
    union  all select 'u','a3','i','r'
    go
    
    --视图
    create view 视图名
    as
    select a.*,b.g
    from 表1 a join 表2 b on a.a=b.a
    go
    
    --处理的触发器
    create trigger tr_process on 视图名
    instead of insert,update,delete
    as
    if exists(select 1 from inserted)
    if exists(select 1 from deleted)
    begin
    select id=identity(int,1,1),a,b,c,d,g into #i from inserted
    select id=identity(int,1,1),a into #d from deleted
    update 表1 set a=i_a,b=i_b,c=i_c,d=i_d
    from 表1 a join(
    select i_a=i.a,i_b=i.b,i_c=i.c,i_d=i.d,d_a=d.a
    from #i i join #d d on i.id=d.id
    )b on a.a=d_a
    
    update 表2 set a=i_a,g=i_g
    from 表2 a join(
    select i_a=i.a,i_g=i.g,d_a=d.a
    from #i i join #d d on i.id=d.id
    )b on a.a=d_a
    end
    else
    begin
    insert 表1(a,b,c,d) select a,b,c,d from inserted
    insert 表2(a,g) select a,g from inserted
    end
    else
    begin
    delete 表1 from 表1 a join deleted d on a.a=d.a
    delete 表2 from 表2 a join deleted d on a.a=d.a
    end
    go
    
    --显示视图
    select * from 视图名
    go
    
    --测试触发器
    update 视图名 set b=b+'bb',g=g+'gg'
    insert 视图名 select 1,'aa','b','c','d','g'
    delete 视图名 where a='a2'
    go
    
    --显示处理结果
    select * from 视图名
    go
    
    --删除测试
    drop view 视图名
    drop table 表1,表2
    
    /*--测试结果
    
    --视图的效果
    ID          A          B          C          D          g          
    ----------- ---------- ---------- ---------- ---------- ---------- 
    1           a          b          c          d          q
    2           a2         b          c          d2         k
    3           a3         c          b          a          r
    
    (所影响的行数为 3 行)
    
    
    --触发器处理的效果
    ID          A          B          C          D          g          
    ----------- ---------- ---------- ---------- ---------- ---------- 
    1           a          bbb        c          d          qgg
    3           a3         cbb        b          a          rgg
    4           aa         b          c          d          g
    
    (所影响的行数为 3 行)
    
    --*/
  • 相关阅读:
    第十二周学习进度条
    寻找水王
    第十一周进度条
    第十周进度条
    构建之法阅读笔记(二)
    第九周学习进度
    团队名字
    站立会议09
    站立会议08
    站立会议07
  • 原文地址:https://www.cnblogs.com/perock/p/2768146.html
Copyright © 2020-2023  润新知