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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.07.2019, 15:48   #1  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
? AX2009. Insert_Recordset идёт построчно
В чём ошибка?

Объявляю одну таблицу как временную и, чтобы ускорить, через insert_recordset записываю сгруппированные данные с подсчитанной суммой.
X++:
MyTable   myTable, newMyTable;
;
newMyTable.setTmp();

ttsBegin;
insert_recordset newMyTable (field1, field2, field3, Qty)
select field1, field2, field3, sum(Qty)
from myTable
group by field1, field2, field3
where field4 == NoYes::Yes;
ttsCommit;
Но оно отрабатывает так, как-будто делаю while select ... insert.
На таблице нет метода insert()

Последний раз редактировалось SuperStar88; 25.07.2019 в 15:52.
Старый 25.07.2019, 15:55   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Ошибка в том, что вы делаете таблицу временной.
__________________
// no comments
За это сообщение автора поблагодарили: S.Kuskov (2), SuperStar88 (1).
Старый 25.07.2019, 16:13   #3  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
Цитата:
Сообщение от dech Посмотреть сообщение
Ошибка в том, что вы делаете таблицу временной.
А как правильно тогда сгруппировать и просуммировать данные? В Map запихнуть?
Старый 25.07.2019, 16:45   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от SuperStar88 Посмотреть сообщение
А как правильно тогда сгруппировать и просуммировать данные? В Map запихнуть?
Что значит правильно? Как вы собираетесь дальше использовать результат суммирования и группировки? От этого и отталкивайтесь.

Групповые операции поддерживает СУБД над своими объектами, таблицами, представлениями. Если результат нужно передать за пределы СУБД, то о каких групповых операциях можно говорить?

Временные таблицы в версиях Аксаты до AX2012 реализованы на уровне приложения, а не в БД. В версиях начиная с AX2012 появились временные таблицы уровня базы данных. Там наверное можно реализовать заполнение такой таблицы при помощи групповой операции.
За это сообщение автора поблагодарили: SuperStar88 (1).
Старый 26.07.2019, 07:17   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от SuperStar88 Посмотреть сообщение
А как правильно тогда сгруппировать и просуммировать данные? В Map запихнуть?
Я думаю, в вашем случае достаточно сделать так:
X++:
while select Field1, Field2, Field3, sum(Qty) from myTable
group by Field1, Field2, Field3
where Field4 == NoYes::Yes
{
    ...
}
Используя setTmp() вы размещаете таблицу в оперативной памяти под юрисдикцией аксапты, а не SQL Server. Поэтому здесь не применимы BULK-операции для вставки записей. Т.е. insert_recordset используется на реальных таблицах и превращается в запрос типа
X++:
INSERT INTO MyNewTable (Field1, Field2, Field3, Qty)
SELECT Field1, Field2, Field3, Sum(Qty) FROM MyTable A
WHERE A.DataAreaId = 'dat'
  AND A.Field4 = 1
GROUP BY Field1, Field2, Field3
Что означает, что MyTable и MyNewTable должны быть разными таблицами, а у вас это 2 переменные одного типа.
__________________
// no comments
Старый 26.07.2019, 08:50   #6  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Что значит правильно? Как вы собираетесь дальше использовать результат суммирования и группировки? От этого и отталкивайтесь.
Хочу выгрузить сгруппированные данные во временную таблицу, чтобы уменьшить кол-во строк, а потом делать выборку уже из неё.
У меня есть Номенклатура, Бюджетный код, Заводской заказ и куча Цехов, а для расчётов мне цеха не нужны. Также надо вставить туда дополнительные данные.
Цитата:
Сообщение от dech Посмотреть сообщение
Используя setTmp() вы размещаете таблицу в оперативной памяти под юрисдикцией аксапты, а не SQL Server. Поэтому здесь не применимы BULK-операции для вставки записей.
Ладно, что-то что-то другое думать, как оптимизировать
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax 2009. Вопрос по insert_recordset SuperStar88 DAX: Программирование 2 16.04.2019 15:01
fatihdemirci: X++ Set Based Operations : Insert_recordset Blog bot DAX Blogs 0 12.03.2019 05:26
Перекрестные ссылки, update_recordset и insert_recordset Dark Light DAX: Программирование 8 05.10.2015 14:41
Insert_recordset и временные таблицы в БД Logger DAX: Программирование 3 25.08.2011 12:59
Не работает Insert_Recordset Yprit DAX: Программирование 21 06.10.2004 12:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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