首页 / 知识

关于sql server:OpenQuery结果中的SQL语句出现” Invalid column name”错误

2023-04-14 08:38:00

关于sql server:OpenQuery结果中的SQL语句出现” Invalid column name”错误

“Invalid column name” error on SQL statement from OpenQuery results

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

1
2
SELECT"Ugly OLAP name" AS"Value"
FROM OpenQuery( OLAP, 'OLAP Query')

但是,如果我尝试添加:

1
WHERE"Value"> 0

我得到一个错误

Invalid column name 'Value'

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

所以问题是查询元素的处理顺序与它们的写入顺序不同。根据此来源:

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

MSSQL中的评估顺序为:

  • 加入
  • 哪里
  • 通过...分组
  • 拥有
  • 选择
  • 订购
  • 因此直到WHERE和HAVING子句之后才处理别名。


    这应该起作用:

    1
    2
    3
    4
    5
    6
    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子句应引用原始列名:

    1
    2
    3
    SELECT"Ugly OLAP name" AS"Value"
    FROM OpenQuery( OLAP, 'OLAP Query')
    WHERE"Ugly OLAP name"> 0

    我可以保证不将其保留在GROUP BY中。好消息是,它是普通的旧选定别名,效果很好。


    哦,真可恶。我刚刚看到,您选择AS FOO。在这种情况下,您不需要HAVING子句吗?

    1
    SELECT whatever AS VALUE FROM TABLE HAVING VALUE > 1;

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


    语句错误查询执行

    最新内容

    相关内容

    猜你喜欢