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 工作正常的主要内容,如果未能解决你的问题,请参考以下文章