为视图或函数指定的列名比其定义中的列多

 

今天上班的时候,发现昨天写的一个功能无法正常获得数据,找了很久,才发现是其他同事动过功能视图所查询的的基本表结构。

情况:

  有视图A,视图B,视图B查询视图A的数据,并且使用*代替列名,更新视图A中的字段(添加、删除列),出现“为视图或函数'B'指定的列名比其定义中的列多。”错误。

解决1:

视图需重新刷新,特别是如果基础表结构或字段类型更改后经常会有这种问题

sp_refreshview  
  刷新指定视图的元数据。由于视图所依赖的基础对象的更改,视图的持久元数据会过期。   
  语法  
  sp_refreshview   [   @viewname   =   ]   'viewname'     
  参数  
  [@viewname   =]   'viewname'   是视图的名称。viewname   是   nvarchar   类型,可以是由多部分组成的标识符,无默认值。  
   
  返回代码值  
  0(成功)或非零数字(失败)   
  权限  
  sysadmin   固定服务器角色成员、db_owner   和   db_ddladmin   固定数据库角色成员以及视图的所有者可以在视图上执行   sp_refreshview。   
  示例  
  下例刷新视图B的元数据。   
  exec   sp_refreshview   titleview
  

解决2:

  将视图B中查询视图A的*替换为相应的列名即可,推荐此法。

 

此记。以备后查。

地址: http://www.haogongju.net/art/615352
参考一个地址: http://topic.csdn.net/t/20030630/11/1972553.html 我试了,但是不行。上面的方法:  exec   sp_refreshview   titleview   可以解决。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值