Ошибка "Недопустимое имя столбца" в выражении 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. Хорошая новость заключается в том, что он отлично работает, будучи простым старым выбранным псевдонимом.