标签归档:sp_refreshview

mssql sqlserver 表结构更新,但视图未更新的处理方法


摘要:
下文讲述我们在sqlserver中,编写使用时,使用*代替列名,当数据表列增加时,视图未得到更新的处理方法
实验环境:sql server 2008 R2


项目背景:
今天同事告诉我,查询视图时,出现找不到列,明明数据表上已经添加了相关列

通过查询视图的脚本内容:

 create view [视图名称] 
 as 
 select * from [数据表名称]


出现找不到列名的原因,是由于数据表新增列后,视图中的相关信息还缓存在数据库中,我们可以通过以下两种方式刷新视图,
使视图中存在新增数据列

解决方法1:
删除视图,重建视图
————————————-
解决方法2:
刷新视图

   EXECUTE sp_refreshview N'视图名称';  

相关阅读:
sp_refreshview 关键字简介

mssql sqlserver sp_refreshview 关键字简介


摘要:
下文讲述“sp_refreshview”系统存储过程的功能及使用说明
实验环境:sql server 2008 R2



sp_refreshview功能及语法说明:

sp_refreshview功能:
sp_refreshview应用于更新视图架构。常常由于视图所涉及的元数据对象(物理表,其它视图)对象被更改,
而视图中还缓存中历史结构信息,导致访问视图时,出现以下错误信息:

“消息 207,级别 16,状态 1,第 3 行
列名 ‘***’ 无效。”

——————————————————-
sp_refreshview语法:
sp_refreshview [@viewname=] ‘@viewName’
参数@viewName
输入待更新的视图名称
参数类型:
nvarchar
返回值:
0(成功)其它数值均代码失败
说明:
需拥有对视图的操作权限

sp_refreshview举例应用:

      ---1刷新指定视图
	   EXECUTE sp_refreshview N'dbo.vw_test';  

	  ---2生成批量刷新视图的脚本
       SELECT DISTINCT 'EXEC sp_refreshview ''' + name + ''''   
		FROM sys.objects AS so   
		INNER JOIN sys.sql_expression_dependencies AS sed   
					ON so.object_id = sed.referencing_id   
					WHERE so.type = 'V'