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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.11.2018, 17:09   #1  
AzatGDC is offline
AzatGDC
Участник
 
27 / 14 (1) ++
Регистрация: 08.11.2018
delete_from по связанным таблицам
Добрый день,

Необходимо массово удалить строки по связанным таблицам. Подскажите пожалуйста как это делается? Таблиц 4. Необходимо удалить строки из таблицы строк, затем соотвествующие журналы из таблицы журналов а затем и два справочника. Microsoft пишет что delete_from не поддерживает inner join и предлагает такой вариант как обходной

static void DeleteInnerJoin2bJob(Args _args)
{
MyWidgetTable tabWidget; // extends xRecord.
;
ttsBegin;
while select
from tabGalaxy
where tabGalaxy .isTrusted == 0
{
delete_from tabWidget
where tabWidget .GalaxyRecId ==
tabGalaxy .RecId;
}
ttsCommit;
}

но у меня 4 таблицы по факту. И мне было сказано что вариант выше долго работает и есть другое решение. Заранее спасибо.
Старый 15.11.2018, 17:40   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,305 / 3538 (124) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Если связанные таблицы связаны между собой Relation-ом и есть Delete Action от главной таблицы к подчиненной с режимом Cascade, то удаление записей из главной таблицы автоматически удалит записи из подчиненной.

Например:
X++:
delete_from journals where journals.Status == 0
удалит не только журналы, но и их строки.

Далее, delete_from - самостоятельный оператор и while select, да еще и с транзакциями ему не нужно

Inner Join поддерживается (непонятно, откуда такая информация, что не поддерживается). Правда удаление все равно будет идти только из одной таблицы. Например:
X++:
delete_from trans join journals where journals.RecId == trans.journalsRecId && journals.Status == 1
Такая конструкция удалит строки только из тех журналов, у которых статус =1 (внимание - если есть Relations и Delete Actions - то эта конструкция упрощается до просто
X++:
delete_from journals where journals.Status == 1
)
__________________
Возможно сделать все. Вопрос времени
Старый 15.11.2018, 17:43   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,305 / 3538 (124) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Если у Вас связаны 3 таблицы, как 1:N (справочник-журнал-строки) и между справочником и журналом стоит Cascade, а между журналом и строками Cascade или Cascade+Restricted, то удаление данных из справочника сразу удалит связанные данные из журнала и из строк
__________________
Возможно сделать все. Вопрос времени
Старый 16.11.2018, 06:42   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от AzatGDC Посмотреть сообщение
И мне было сказано что вариант выше долго работает и есть другое решение. Заранее спасибо.
Если это вопрос скорости, то перед delete_from вызовите пару-тройку табличных методов (последний надо вызывать, если ведутся логи, но можно и просто для подстраховки):
X++:
journals.skipDataMethods(true);
journals.skipDeleteActions(true);
journals.skipDatabaseLog(true);
skipDataMethods() может быть заменен методом skipDeleteMethod().
Однако вам нужно будет провести удаление всех 4 таблиц. Если вам нужно не быстрее, а проще - удалите записи таблицы с настроенными DeleteActions, остальное по связям удалится автоматом, как уже написали выше.
__________________
// no comments
Старый 16.11.2018, 08:39   #5  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
если вопрос по версии до D365 и нужна именно скорость, то не проще ли вызвать операцию truncate на SQL?
Старый 16.11.2018, 10:12   #6  
AzatGDC is offline
AzatGDC
Участник
 
27 / 14 (1) ++
Регистрация: 08.11.2018
спасибо за ответ. то что delete_form не поддерживает inner join сказано майкрософтом здесь
https://docs.microsoft.com/en-us/dyn...er/delete-from
строчки
Example 2: Delete Plus Inner Join Logic

X++ does not support an inner join on the delete_from statement. Therefore you cannot use the unmodified join keyword on the delete_from statement. However, there are other ways to logically accomplish an inner join.

The examples in this section show techniques for achieving inner join logic by a sequence of X++ statements.

так же редактор говорит следующее когда я пытаюсь написать
X++:
 delete_from journalStringsAzat
        join journalAzat
            where journalAzat.journalIDAzat == journalStringsAzat.journalIDAzat
внутренее и внешнее объединение в данном контексте не допускаются - err:134

а вот такая конструкция ошибок не вызывает

X++:
 delete_from journalStringsAzat
        exists join journalAzat
            where journalAzat.journalIDAzat == journalStringsAzat.journalIDAzat
Вы написали что удаление происходит из первой таблицы. След-но эта конструкцимя будет иметь такой же эффект капк и inner join в данном контексте?

Спасибо.
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 16.11.2018, 14:50   #7  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
напишите sql скрипт
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: How to delete On-premise environment from LCS project Blog bot DAX Blogs 0 27.06.2016 22:12
palleagermark: How to delete Label Files from AX 2012 Blog bot DAX Blogs 0 22.01.2014 15:11
emeadaxsupport: How to delete orphaned data remained from deleted company? Blog bot DAX Blogs 0 09.12.2010 16:11
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
delete_from chel DAX: Программирование 15 04.02.2005 17:09

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

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

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