2008-09-05 3 views
19

Я пытаюсь выполнить SQL-запрос через связанный сервер SSAS. Первоначальный запрос работает нормально:Ошибка имени недопустимого столбца в операторе SQL из результатов OpenQuery

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

Но если я пытаюсь добавить:

WHERE "Value" > 0 

Я получаю сообщение об ошибке

имя Invalid столбца 'Value'

Любой идеи, что я могу делать неправильно?


Таким образом, проблема заключалась в том, что порядок обработки элементов запроса отличается от порядка их написания. Согласно этому источнику:

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

Порядок оценки в MSSQL является:

  1. ОТ
  2. ПО
  3. РЕГИСТРИРУЙТЕСЬ
  4. ГДЕ
  5. GROUP BY
  6. HAVING
  7. ВЫБОР
  8. ORDER BY

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

+1

Что со всеми не-ответами на этот вопрос !? – 2011-07-27 17:20:06

ответ

17

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

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

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

0

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

SELECT whatever AS value FROM table HAVING value > 1; 

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

6

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

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

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

Смежные вопросы