一般来说,在修改表的结构之后,与些表对应的视图也应该重建,以适应新表结构的变化。因此,在DBMS中应该提供重建视图的相关命令。在Oracle中提供了这样的procedure,一些oralce的三方工具,如Toad、Rapid Sql等都提供了对应的工具直接执行重建视图的命令,但是在Sql server中却没有提供。

 

查了一下sql server的帮助,发现有这样一个过程:

sp_refreshview
刷新指定视图的元数据。由于视图所依赖的基础对象的更改,视图的持久元数据会过期。

因此,我们可以自己建一个过程来实现重建所有视图,如下:

create procedure RefreshAllView
as

declare @ViewName varchar(250)
declare #views cursor for select name from sysobjects
 where objectproperty(id,N'IsView')=1 and uid=1 order by name
open #views
fetch next from #views into @viewname
while @@fetch_status=0
begin
 print '正在更新: '+@viewname
 exec sp_refreshview @viewname --更新视图
 
 fetch next from #views into @viewname
end
close #views
deallocate #views

go

 

--调用:

exec RefreshAllView

 

此过程不仅可以解决重建所有视图的问题,还可以通过重建,发现系统中某些视图的语法错误。

 

Posted on 2006-02-21 00:16  Alter-it  阅读(413)  评论(1编辑  收藏  举报