ALTER VIEW 给出无效的列名,但 SELECT 工作正常

Posted

技术标签:

【中文标题】ALTER VIEW 给出无效的列名,但 SELECT 工作正常【英文标题】:ALTER VIEW gives invalid column name, but SELECT works fine 【发布时间】:2017-02-14 20:17:26 【问题描述】:

我正在尝试更改视图并收到以下错误:

消息 207,级别 16,状态 1,过程 PackingList列名“NetLbs”无效。

这看起来像是一条不言自明的消息,但问题是列确实存在。如果我运行作为视图一部分的选择,它工作得非常好。

这是我的变更声明。

alter view [vw].[PackingList]
as
select b.Id,
   b.NetLbs

from WorkOrderDetails d
join Boxes b on b.Id = d.BoxId

如果我只是执行这部分,它工作正常。

select b.Id,
   b.NetLbs

from WorkOrderDetails d
join Boxes b on b.Id = d.BoxId

我尝试删除视图并使用 create,但也失败了。 于是我用这个 sql 创建了视图。

create view [vw].[PackingList] as select null as test

而改变仍然失败。

但是我了解到,如果我在 dbo 架构中创建视图,它就可以工作。我不确定接下来应该尝试什么。

【问题讨论】:

我会尝试将架构放在您的表格前面。看看有没有帮助。 视图使用[vw] 模式是否有重要原因?你真的有这么多观点,把它们分开很重要吗?如果有,那么我建议在视图定义中使用[dbo] 限定您的表。 另外,您将两个表连接在一起,并且只使用了一个表中的数据。这就是你想要的。 Always specify the schema. (此外,错误消息显示“程序”,因为他们没有在错误消息中标记它。触发器、函数等中的某些类别的错误也会发生同样的情况。忽略它。) 【参考方案1】:

user3083310 建议将架构放在我的表格前面。我做到了,而且效果很好。

另请参阅Aaron Bertrand 中的this post,了解有关您为什么应该这样做的更多信息。

【讨论】:

以上是关于ALTER VIEW 给出无效的列名,但 SELECT 工作正常的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00904: 标识符无效但表名和列名正确?

在 Azure 中运行的流分析查询中的语法问题:列名无效:“有效负载”

ALTER添加列后,立即UPDATE该列会报错

sql2008提示“列名无效”,但是能正常查询

所有列名无效

SQL修改列名,说列名无效