SQLSERVER視圖錯位的解決辦法

原始需求以下:spa

有一個表T1code

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中 每條記錄的更新時間(觸發器實現,此處略過)blog

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

 

建立兩個視圖:get

--視圖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.updateimetable

問題1:t1新增字段後,視圖不會自動新增字段

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

查看一下視圖:class

select * from view1;
select * from view2;

結果以下:date

兩個 視圖中均沒有新增的字段v2.select

這個問題暫時用刷新視圖的方法處理,是否有其它方式暫未找到。方法

  sp_refreshview view1

 

問題2:新增字段會形成視圖與原始表的列錯位。

仔細看上圖中的第1個結果,updatetime並非顯示它的值getdate(),而是顯示的view1中新增的字段v2的值。im

而view2中不會有這個問題

相關文章
相關標籤/搜索