Ошибка «Неверное имя столбца» в операторе SQL из результатов OpenQuery - PullRequest
20 голосов
/ 05 сентября 2008

Я пытаюсь выполнить SQL-запрос через связанный сервер SSAS. Начальный запрос работает нормально:

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. FROM
  2. ON
  3. JOIN
  4. ГДЕ
  5. GROUP BY
  6. HAVING
  7. SELECT
  8. ЗАКАЗАТЬ ПО

Таким образом, псевдоним не обрабатывался до тех пор, пока не были выполнены предложения WHERE и HAVING.

Ответы [ 4 ]

17 голосов
/ 05 сентября 2008

Это должно работать:

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

Дело не в том, что Value является зарезервированным словом, проблема в том, что это псевдоним столбца, а не имя столбца. Делая это встроенным представлением, «Значение» становится именем столбца и может затем использоваться в предложении where.

6 голосов
/ 05 сентября 2008

Вы используете «Значение» как псевдоним столбца, и я не думаю, что псевдоним может появиться в предложении where. Он просто используется для именования возвращаемого значения столбца. Ваше предложение where должно ссылаться на оригинальное имя столбца:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')
WHERE "Ugly OLAP name" > 0
0 голосов
/ 19 апреля 2012

Я могу ручаться за то, что оставил это вне GROUP BY. Хорошая новость в том, что он отлично работает, будучи простым старым выбранным псевдонимом.

0 голосов
/ 05 сентября 2008

О, облом. Я только что видел, вы выбираете, как FOO. Вам не нужен ХЕЙВИНГ Клаус в этом случае?

SELECT whatever AS value FROM table HAVING value > 1;

Я бы не стал использовать «значение». Но, чтобы быть уверенным, посмотрите в своих документах!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...