一般来说,在修改表的结构之后,与些表对应的视图也应该重建,以适应新表结构的变化。因此,在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
此过程不仅可以解决重建所有视图的问题,还可以通过重建,发现系统中某些视图的语法错误。