码迷,mamicode.com
首页 > 其他好文 > 详细

5.3刷新视图

时间:2016-04-15 19:44:21      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

在创建视图时,sql server会保存元数据信息,用于描述视图、列、安全、依赖等信息;基础对象中的架构更改不影响视图的元数据;更改架构后使用sp_refreshview存储过程刷新视图是一个好习惯,这样对架构的更改就会反映在视图中。

为了掩饰架构改变后,不刷新视图元数据会发生什么情况,运行下面的代码创建表T1和视图V1

use tempdb;
go
if OBJECT_ID (dbo.v1) is not null
    drop view dbo.v1;
if OBJECT_ID(dbo.T1) is not null
    drop table dbo.T1;

create Table T1(col1 int ,col2 int);
insert into T1(col1,col2) values(1,2);

go
create view V1
as 
select * from T1;

第一次创建V1时,sql server保存关于列的元数据信息,此时的列为Col1和Col2,如果你查询该视图,你将得到如下结果,即它包含两个列

技术分享

接下来,我们给基础表T1增加一列Col3

alter table dbo.T1 add col3 int;

T1的架构更改并没有反应到视图的元数据中。视图中还是包含两列,如果你再次查询视图,依然得到上图所示的结果。

要刷新视图的元数据,对V1运行sp_refreshview存储过程

exec sp_refreshview dbo.V1;

再次执行查询

select * from dbo.V1;

将得到如下结果

技术分享

更改数据库的架构后,刷新所有视图的元数据信息是个好习惯

为避免编写sp_refreshview语句的繁琐过程,可以使用如下语句:

select NExec sp_refreshview +QUOTENAME(ViewName,‘‘‘‘)+; as cmd
from
(select QUOTENAME(TABLE_SCHEMA)+N,+QUOTENAME(TABLE_NAME) as ViewName from INFORMATION_SCHEMA.VIEWS) as V
where OBJECTPROPERTY(OBJECT_ID(ViewName),IsSchemaBound)=0

5.3刷新视图

标签:

原文地址:http://www.cnblogs.com/xqlcrystal/p/5396308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!