表结构改动后视图问题

来源:互联网 发布:阿里云服务器搭建ecs 编辑:程序博客网 时间:2024/05/17 21:44

相信大家也都遇到过,当修改了表结构后,与之相关的视图就会有问题,这是因为我们没有刷新视图的缘故,为什么表结构变化后要刷新视图?,分享一下解决此类问题的方法:

1.重新修改相关视图,将Alter脚本重新执行即可,不需要改动代码。

2.执行sp_refreshview命令,刷新视图依赖。重点介绍一上这种方法。

   (1)sp_refreshview 视图名   --刷新单个视图

   (2)刷新所有视图

--刷新所有视图
declare @ViewName varchar(250)
declare @i int
set @i=0
declare #_cursor cursor for

select name  from sysobjects where type='V'

open #_cursor

fetch next from #_cursor into @viewname

while @@fetch_status=0
 begin
  print '成功刷新视图: '+ @viewname
  exec sp_refreshview @viewname 
  set @i= @i +1
  fetch next from #_cursor into @viewname
 end

close #_cursor
deallocate #_cursor
print '完成'
print '共成功刷新' + convert(varchar(10),@i) + '个视图'

 

(3)刷新与表table1相关的所有视图

--引自msdn

USE AdventureWorks;
GO
SELECT DISTINCT 'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects so INNER JOIN sys.sql_dependencies sd
ON so.object_id = sd.object_id
WHERE type = 'V'
AND sd.referenced_major_id = object_id('table1')

 

以上三种方法,个人更加推荐第三种,但每三种目前的方法只能把与表相关的视图都找出来,怎么执行?请高手补充,如果是把查询结果复制出来单个执行,效率太低。

补充:第三种方法

go
declare @sql nvarchar(max) select distinct @sql=isnull(@sql,';')+ 'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects so INNER JOIN sys.sql_dependencies sd
ON so.object_id = sd.object_id
WHERE type = 'V'
AND sd.referenced_major_id = object_id('table1')
exec(@sql)

 

 

 

 


原创粉丝点击