提问人:dmo 提问时间:9/6/2008 最后编辑:ConcernedOfTunbridgeWellsdmo 更新时间:4/20/2012 访问量:85134
OpenQuery 结果中 SQL 语句上的“列名无效”错误
"Invalid column name" error on SQL statement from OpenQuery results
问:
我正在尝试通过链接的 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中的评估顺序为:
- 从
- 上
- 加入
- 哪里
- 分组依据
- 拥有
- 选择
- 排序方式
因此,直到 WHERE 和 HAVING 子句之后才处理别名。
答:
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 之外。好消息是,作为一个普通的旧选择别名,它工作得很好。
评论