为视图或函数指定的列名比其定义中的列多。
今天上班的时候,发现昨天写的一个功能无法正常获得数据,找了很久,才发现是其他同事动过功能视图所查询的的基本表结构。
情况:
有视图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的*替换为相应的列名即可,推荐此法。
此记。以备后查。
懒惰,是一个通病。
努力,必会成为一种习惯。
分类:
勤而时习之,意淫之天道
标签:
.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库