18.02.2021, 11:52 | #1 |
Участник
|
AX09 вопрос SQL запросам генерируемым в QueryBuildDatasource
Привет.
Подскажите почему AX09 строит свои запросы с нарушением порядка операторов ? Если этот запрос тупо вставить в ту же sql студию она естественно будет ругатся. Приходится его "конвертировать" с соблюдением синтаксиса SQL: X++: SELECT * | { [ DISTINCT | ALL ] { } [,...] } FROM { [ ] } [,...] [ WHERE ] [ GROUP BY { | Integer } [,...] ] [ HAVING ] [ { UNION [ALL] | INTERSECT | EXCEPT SELECT- } ] [...] [ ORDER BY { | Integer [ ASC|DESC ] } [,...] ] [ INTO { TEMP | SCRATCH } ] ; Например запроса: X++: SELECT FIRSTFAST dataAreaId FROM ProjTable GROUP BY ProjTable.dataAreaId, ProjTransPosting.ProjId, ProjTransPosting.CategoryId WHERE ((APMSystemRef = 0)) AND ((ProjId = N'PR000081-0167001')) JOIN FIRSTFAST ProjId, CategoryId, SUM(AmountMst), SUM(AmountMSTSecond) FROM ProjTransPosting WHERE ProjTable.ProjId = ProjTransPosting.ProjId AND ((LedgerTransDate>={ts '2021-02-09 00:00:00.000'} AND LedgerTransDate<={ts '2021-02-09 00:00:00.000'})) AND ((ProjTransType = 2) OR (ProjTransType = 3) OR (ProjTransType = 4)) AND ((PostingType = 123 OR PostingType = 125)) 1. Почему он имеет такой некорректный вид? 2. И как его можно преобразовывать автоматически к корректному виду? Есть такие средства? 3. Как SQL сервер понимает данный запрос из AX и не ругается? |
|
18.02.2021, 13:33 | #2 |
Участник
|
Если кратко, то там вы видите не реальный SQL запрос, а текст на некоем промежуточном языке запросов который есть в аксапте. Он неточно соответствует синтаксису SQL. На SQL уйдет запрос в нормально SQL синтаксисе, т.е. то что вы видите пройдет допобработку перед отправкой в SQL Server.
В 2012-й сделали в ядре метод, который вернет текст реального SQL. А в 2009-й такого нет. Вы можете включить логирование запросов и добавить вызов Query.literals(1) тогда в логе запросов увидите реальный запрос с константами. Вот его можно скормить в sql студию. Съест без ошибок. Последний раз редактировалось Logger; 18.02.2021 в 13:37. |
|
|
За это сообщение автора поблагодарили: oleggy (1). |
18.02.2021, 13:36 | #3 |
Участник
|
Спасибо.
1. Можете скинуть ссылку на инфу об этом? Хотелось бы изучить поподробнее. 2. Подскажите название этого метода в 2012 AX ?1 3. И еще, этот метод из класса QueryBuildDataSource ? Последний раз редактировалось oleggy; 18.02.2021 в 13:38. |
|
18.02.2021, 13:52 | #4 |
Участник
|
В 12-ке это
\System Documentation\Classes\xRecord\getSQLStatement т.е. метод на табличном буфере. |
|