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


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

    情况:

      有视图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的*替换为相应的列名即可,推荐此法。

    此记。以备后查。

    懒惰,是一个通病。 努力,必会成为一种习惯。
  • 相关阅读:
    c++ vector容器的使用,序列倒叙reverse(),容器底部插入一个数值push_back()
    vs2015+opencv-3.2.0-vc14配置
    串的匹配算法--C语言实现
    顺序队列与链式队列--C语言实现
    链式栈-C语言实现
    顺序栈与两栈共享空间-C语言实现
    静态链表-C语言实现
    循环双向链表-C语言实现
    链表-C语言实现
    顺序表-C语言实现
  • 原文地址:https://www.cnblogs.com/encoding/p/1881756.html
Copyright © 2020-2023  润新知