Краткое описание :
Сделать процедуру выгрузки из таблицы в памяти во временную таблицу DSQL, использующую BULK INSERT для ускорения вставкиОписание :
Прямой SQLЧто измененно :
DSQL
----- СУТЬ ПРЕДЛОЖЕНИЯ -----
Сделать процедуру выгрузки из логической таблицы во временную таблицу DSQL, использующую BULK INSERT для ускорения вставки.
Как измененно :
Метод логической таблицы
function sqlFlushIntoTmp(iTable: integer; tableName: string; flags : word): word;
iTable -- номер узла в ЛТ, из которого копировать
tableName -- имя временной таблицы DSQL
flags:
* FIT_Create -- создать временную таблицу, совпадающую полями c узлом, но без индексов и реляций; если была другая временная таблица с таким именем, она будет удалена (аналогично sqlCreateTmpTable)
* FIT_Truncate -- очистить целевую таблицу перед вставкой
* FIT_ByName -- связывать поля по именам, а не по порядку. Имеет смысл и совместно с FIT_Create, т.к. некоторые поля исходного узла могут отсутствовать в выборке ЛТ, в этом случае сопоставление по номерам даже с клоном может быть некорректным.
Возвращает код ошибки, в частности может вернуть tsFileNotFound, если нет временной таблицы с данным именем, tsInvalidOperation, если операция не поддерживается на данной платформе, tsDuplicateKey, если нарушено уникальное ограничение в целевой таблице (в последнем случае полный откат вставки не гарантируется)
Ещё особенности:
* Не работает на платформе Pervasive (возвращает tsInvalidOperation)
* На работу влияет параметр Lot.ImportBatchRowCount
* Ограничения и фильтры не снимаются с узла! Происходит пробежка в текущих ограничениях и в текущем порядке. Если ограничения не нужны, снимите их вручную. После операции позиция в узле не восстанавливается.
* В режиме FIT_Create создаёт таблицу с опцией ctmDynamicIndex, что позволяет добавить индексы потом.
* Целевая таблица должна быть создана через Атлантис, иначе программа не найдёт информацию о её колонках.