OpenQuery 结果中 SQL 语句上的“列名无效”错误

"Invalid column name" error on SQL statement from OpenQuery results

提问人:dmo 提问时间:9/6/2008 最后编辑:ConcernedOfTunbridgeWellsdmo 更新时间:4/20/2012 访问量:85134

问:

我正在尝试通过链接的 SSAS 服务器执行 SQL 查询。初始查询工作正常:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')

但是,如果我尝试添加:

WHERE "Value" > 0

我收到错误

无效的列名“值”

知道我可能做错了什么吗?


因此,问题在于处理查询元素的顺序与编写它们的顺序不同。根据这个消息来源:

http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

MSSQL中的评估顺序为:

  1. 加入
  2. 哪里
  3. 分组依据
  4. 拥有
  5. 选择
  6. 排序方式

因此,直到 WHERE 和 HAVING 子句之后才处理别名。

sql-server

评论

1赞 Lightness Races in Orbit 7/28/2011
这个问题的所有非答案是怎么回事!?

答:

0赞 Till 9/6/2008 #1

哦,无赖。我刚刚看到,你选择 AS FOO。在这种情况下,你不需要一个有克劳斯吗?

SELECT whatever AS value FROM table HAVING value > 1;

我仍然不会使用“值”。但可以肯定的是,请在您的文档中查找它!

17赞 Chris Miller 9/6/2008 #2

这应该有效:

SELECT A.Value
FROM (
SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')
) AS a
WHERE a.Value > 0

并不是说 Value 是保留字,问题在于它是列别名,而不是列名。通过使其成为内联视图,“Value”成为列名,然后可以在 where 子句中使用。

6赞 Andrew 9/6/2008 #3

您使用“Value”作为列别名,我认为别名不能出现在 where 子句中。它只是用于命名返回的列值。where 子句应引用原始列名:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')
WHERE "Ugly OLAP name" > 0
0赞 John Dunagan 4/20/2012 #4

我可以保证将它排除在 GROUP BY 之外。好消息是,作为一个普通的旧选择别名,它工作得很好。