Цитата:
Сообщение от
sukhanchik
попытаться бить на отдельные транзакции
И даже тогда можно не отказываться от преимуществ конструкции delete_from. 'Порционного' удаления можно добиться при помощи фильтрации.
X++:
SALESTABLE_TONTRA40478 Table;
date month = 01\03\2010;
RecId minRecId, maxRecId, fromRecId, toRecId;
int partSize = 10000 // Число подобрать надо;
select minof(RecId) from Table where Table.month == month;
fromRecId = Table.RecId;
select maxof(RecId) from Table where Table.month == month;
toRecId = Table.RecId;
for(fromRecId = minRecId; fromRecId <= maxRecId; fromRecId += partSize)
{
toRecId = fromRecId + partSize;
Table.skipDatabaseLog(true);
Table.skipDeleteActions(true);
Table.skipDeleteMethod(true)
delete_from Table
where
Table.month == month &&
Table.RecId >= fromRecId &&
Table.RecId <= toRecId;
}