基表一旦表结构改变,相应所有视图就必须重新编译。 可以用以下方便处理: /* 更新数据库中的所有视图 解决由于视图所依赖的基础对象的更改,视图的持久元数据会过期。 注意:此更新是针对当前数据库,所以之前要先打开要更新的数据库 */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
TO: zjcxc(邹建) 如果TABLE B有的字段为空,用where a.code=b.code是错误的.怎么修改
--不是错误,是没有数据,如果你要求任意表有数据都要显示出来,改连接方式create view 视图名 as select a.code,a.explain,b.numb from A full join B on a.code=b.code
当然是直接用视图好从以后的修改方便性来看,直接用视图的话,是数据库中直接处理并返回结果,以后如果有什么变化只需要改视图就可以处理从效率上来看,视图是经过预编译的,在处理时不需要再次确定其处理方法,而数据库中确定数据处理方法是CPU消耗大的一种处理,这就意味着调用视图可以提高处理效率
可以用以下方便处理:
/*
更新数据库中的所有视图
解决由于视图所依赖的基础对象的更改,视图的持久元数据会过期。
注意:此更新是针对当前数据库,所以之前要先打开要更新的数据库
*/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
如果TABLE B有的字段为空,用where a.code=b.code是错误的.怎么修改
as
select a.code,a.explain,b.numb
from A full join B on a.code=b.code