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中不会有这个问题