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 行)
    
    --*/
  • 相关阅读:
    一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
    解决Silverlight F5刷新问题
    C# 将 HTML 转换为图片或 PDF
    C# 使用 Windows API 发送文件到打印机
    C# 各种导入 Excel 文件的数据的方法总结
    C# 使用 SqlBulkCopy 类批量复制数据到数据库
    C# 导出 Excel 的各种方法总结
    C# 使用windows服务发送邮件
    C# 创建、部署和调用WebService的简单示例
    SQL Server 常用函数使用方法(持续更新)
  • 原文地址:https://www.cnblogs.com/perock/p/2768146.html
Copyright © 2011-2022 走看看