代码之家  ›  专栏  ›  技术社区  ›  dmo

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

  •  20
  • dmo  · 技术社区  · 16 年前

    我正在尝试通过链接的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. 订购人

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

    4 回复  |  直到 16 年前
        1
  •  17
  •   Chris Miller    16 年前

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

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

        2
  •  6
  •   Andrew    16 年前

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

    SELECT "Ugly OLAP name" as "Value" 
    FROM OpenQuery( OLAP, 'OLAP Query')
    WHERE "Ugly OLAP name" > 0
    
        3
  •  0
  •   Till    16 年前

    哦,糟糕透了。我刚才看到了,你选择作为FOO。在这种情况下你不需要有克劳斯吗?

    SELECT whatever AS value FROM table HAVING value > 1;
    

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

        4
  •  0
  •   John Dunagan    13 年前

    我可以保证把它排除在小组之外。好消息是,作为一个普通的老别名,它工作得很好。