AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.02.2021, 11:52   #1  
oleggy is offline
oleggy
Участник
 
268 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,933 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 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  
oleggy is offline
oleggy
Участник
 
268 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Спасибо.
1. Можете скинуть ссылку на инфу об этом? Хотелось бы изучить поподробнее.
2. Подскажите название этого метода в 2012 AX ?1
3. И еще, этот метод из класса QueryBuildDataSource ?

Последний раз редактировалось oleggy; 18.02.2021 в 13:38.
Старый 18.02.2021, 13:52   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,933 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В 12-ке это
\System Documentation\Classes\xRecord\getSQLStatement
т.е. метод на табличном буфере.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
fed: Two stories about inventory closing and SQL Locks Blog bot DAX Blogs 3 14.01.2014 11:53
Connection к другому SQL Server Poleax DAX: Программирование 5 19.10.2010 10:49
Вопрос по Журналу трассировки операторов SQL propeller DAX: Программирование 7 23.10.2008 19:36
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:26.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.