为啥我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行

Posted

技术标签:

【中文标题】为啥我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行【英文标题】:Why do I get an "Invalid column name"? Msg 207 Level 16 State 1 Line 14为什么我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行 【发布时间】:2020-11-12 17:11:36 【问题描述】:

当我在 where 子句中使用别名引用时,为什么会收到“无效的列名”错误 Msg 207 Level 16 State 1 Line 14? 创建表临时 ( col1 nvarchar(25), col2 nvarchar(25) )

insert into  temp
values ('Babahoyo', 'Ecuador'),
       ('Stavanger', 'Norway'),
       ('Seattle', 'USA'),
       ('New York City', 'USA')

select 
    row_number() over (order by col2) as N, 
    col1, col2
from
    temp
where 
    n = 2

db Fiddle

【问题讨论】:

SQL Condition on Window function 这能回答你的问题吗? SQL Condition on Window function 【参考方案1】:

您不能将an alias reference 放入where clause

select * from
(
select row_number() OVER (ORDER BY col2) as N, col1, col2
from temp
)A
where n = 2

【讨论】:

@user716255,你可以试试我给出的答案——使用子查询 更准确地说,您不能在 where 子句中使用来自同一“范围”的 column 别名引用。 table 别名是不同的,如代码所示,来自嵌套范围(无论是子查询还是 CTE)的列别名都是有效的。【参考方案2】:

使用offset/fetch:

select t.*
from temp
order by col2
offset 1 row fetch 1 row only

【讨论】:

以上是关于为啥我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到错误消息?

为啥我会收到错误消息:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本

为啥我会收到关于复合类的消息?

为啥我会收到 50% 的 GCP Pub/Sub 消息重复?

为啥我会收到错误消息:“FileExistsError: [WinError 183] 当文件已存在时无法创建文件”?

为啥我会收到此错误? “气体估算错误,出现以下消息(见下文)。交易 > 执行可能会失败”