zoukankan      html  css  js  c++  java
  • SQLSERVER视图错位的解决办法

    原始需求如下:

    有一个表T1

    create table t1
    (id int not null primary key
    ,v1 varchar(10)
    )
    
    insert into t1 values(1,'aaa');
    insert into t1 values(2,'bbb');

    有一个表TS,用于记录T1中 每条记录的更新时间(触发器实现,此处略过)

    create table ts 
    (id int not null primary key
    ,updatetime datetime
    )
    insert into ts values(1,getdate());
    insert into ts values(2,getdate());

    创建两个视图:

    --视图1
    create
    view view1 as select a.*,b.updatetime from t1 a left join ts b on a.id=b.id
    --视图2
    create view view2 as select b.updatetime,a.* from t1 a left join ts b on a.id=b.id

    这样做是希望记录表t1更新的时间戳,同时当t1新增字段时视图会包含新的字段。相当于 视图 = t1.*+ts.updateime

    问题1:t1新增字段后,视图不会自动新增字段

    alter table t1 add v2 int not null default -1;

    查看一下视图:

    select * from view1;
    select * from view2;

    结果如下:

    两个 视图中均没有新增的字段v2.

    这个问题暂时用刷新视图的方法处理,是否有其它方式暂未找到。

      sp_refreshview view1

    问题2:新增字段会造成视图与原始表的列错位。

    仔细看上图中的第1个结果,updatetime并不是显示它的值getdate(),而是显示的view1中新增的字段v2的值。

    而view2中不会有这个问题

  • 相关阅读:
    F
    D
    J
    M
    H
    L
    Android线程之间的通讯
    Java4Android基础学习之异常
    Java4Android基础学习之接口
    Java4Android基础学习之包与访问权限
  • 原文地址:https://www.cnblogs.com/champaign/p/10968929.html
Copyright © 2011-2022 走看看