Ошибка "Недопустимое имя столбца" в выражении SQL из результатов OpenQuery

Я пытаюсь выполнить 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:

  • С
  • ON
  • JOIN
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • ЗАКАЗАТЬ

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

Ответ 1

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

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

Не это значение является зарезервированным словом, проблема в том, что это псевдоним столбца, а не имя столбца. Сделав это встроенным представлением, значение "Значение" становится именем столбца и затем может использоваться в предложении where.

Ответ 2

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

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

Ответ 3

О, облом. Я только что видел, вы выбираете AS FOO. Вам не нужен клаус HAVING в этом случае?

SELECT whatever AS value FROM table HAVING value > 1;

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

Ответ 4

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