表结构改动后视图问题

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

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)

 

 

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值