Я пытаюсь выполнить SQL-запрос через связанный сервер SSAS. Первоначальный запрос работает нормально:
SELECT "Ugly OLAP name" as "Value"
FROM OpenQuery( OLAP, 'OLAP Query')
Но если я попытаюсь добавить:
WHERE "Value" > 0
Я получаю ошибку
Invalid column name 'Value'
Есть идеи, что я делаю неправильно?
Таким образом, проблема заключалась в том, что порядок, в котором обрабатываются элементы запроса, отличается от порядка их написания. Согласно этому источнику:
http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Порядок оценки в MSSQL:
Таким образом, псевдоним не обрабатывался до тех пор, пока не было предложений WHERE и HAVING.


О, облом. Я только что видел, вы выбираете КАК FOO. Разве в этом случае вам не нужен ХОРОШОЙ клаус?
SELECT whatever AS value FROM table HAVING value > 1;
Я бы все равно не использовал «ценность». Но чтобы быть уверенным, поищите это в своей документации!
Это должно работать:
SELECT A.Value
FROM (
SELECT "Ugly OLAP name" as "Value"
FROM OpenQuery( OLAP, 'OLAP Query')
) AS a
WHERE a.Value > 0
Дело не в том, что Value - зарезервированное слово, проблема в том, что это псевдоним столбца, а не имя столбца. Сделав это встроенным представлением, «Value» становится именем столбца и затем может использоваться в предложении where.
Вы используете «Value» в качестве псевдонима столбца, и я не думаю, что псевдоним может появиться в предложении where. Он просто используется для обозначения возвращаемого значения столбца. Предложение where должно ссылаться на исходное имя столбца:
SELECT "Ugly OLAP name" as "Value"
FROM OpenQuery( OLAP, 'OLAP Query')
WHERE "Ugly OLAP name" > 0
Могу поручиться за то, что не включил его в GROUP BY. Хорошая новость в том, что он отлично работает, будучи простым старым выбранным псевдонимом.
Что за все эти «не-ответы» на этот вопрос !?