来自OpenQuery结果的SQL语句出现"无效的列名"错误

时间:2020-03-05 18:48:23  来源:igfitidea点击:

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

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

但是,如果我尝试添加:

WHERE "Value" > 0

我得到一个错误

Invalid column name 'Value'

有什么想法我可能做错了吗?

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

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

MSSQL中的评估顺序为:

  • 加入
  • 在哪里
  • 通过...分组
  • 拥有
  • 选择
  • 订购

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

解决方案

回答

真是的我刚刚看到,我们选择AS FOO。在这种情况下,我们不需要HAVING子句吗?

SELECT whatever AS value FROM table HAVING value > 1;

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

回答

这应该工作:

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

不是说Value是保留字,而是因为它是列别名,而不是列名。通过使其成为嵌入式视图," Value"成为列名,然后可以在where子句中使用。

回答

我们使用"值"作为列别名,但我认为别名不能出现在where子句中。它仅用于命名返回的列值。where子句应引用原始列名:

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