zoukankan      html  css  js  c++  java
  • 通过视图更新数据

    -示例
    
    --测试数据
    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 行)
    
    --*/
  • 相关阅读:
    【设计模式】模板模式
    【设计模式】适配器模式
    【设计模式】观察者模式
    【设计模式】原型模式
    【设计模式】建造模式
    【Android Studio】Android Studio 安装及设置
    【设计模式】工厂模式(静态工厂模式、工厂方法模式、抽象工厂模式)
    【Linux高级驱动】LCD logo
    【Linux高级驱动】LCD驱动框架分析
    【系统移植】JNI
  • 原文地址:https://www.cnblogs.com/perock/p/2768146.html
Copyright © 2011-2022 走看看