Поделиться через


Функция JetOpenTempTable3

Применимо к: Windows | Windows Server

Функция JetOpenTempTable3

Функция JetOpenTempTable3 создает временную таблицу с одним индексом, который можно использовать для хранения и извлечения записей так же, как обычная таблица, созданная с помощью JetCreateTableColumnIndex. Однако временные таблицы выполняются гораздо быстрее, чем обычные таблицы из-за их нестабильной природы. Их также можно использовать для очень быстрой сортировки и удаления дубликатов наборов записей при доступе исключительно последовательно.

    JET_ERR JET_API JetOpenTempTable3(
      __in          JET_SESID sesid,
      __in          const JET_COLUMNDEF* prgcolumndef,
      __in          unsigned long ccolumn,
      __in_opt      JET_UNICODEINDEX* pidxunicode,
      __in          JET_GRBIT grbit,
      __out         JET_TABLEID* ptableid,
      __out         JET_COLUMNID* prgcolumnid
    );

Параметры

sesid

Сеанс, используемый для этого вызова.

prgcolumndef

Определяет определения столбцов, создаваемых во временной таблице.

Существуют важные ограничения для параметров определения столбцов, которые могут использоваться с временной таблицей. Дополнительные сведения см. в разделе "Примечания".

Помимо обычных параметров определения столбцов, можно также указать ноль или несколько следующих параметров, которые актуальны только в контексте временной таблицы.

Значение

Значение

JET_bitColumnTTDescending

Этот параметр указывает, что порядок сортировки ключевого столбца для временной таблицы должен быть по убыванию, а не по возрастанию. Если этот параметр указан без JET_bitColumnTTKey этот параметр игнорируется.

JET_bitColumnTTKey

Этот параметр указывает, что столбец будет ключевым для временной таблицы.

Порядок определений столбцов с этим параметром, заданным во входном массиве, определяет приоритет каждого ключевого столбца для временной таблицы. Первым определением столбца в массиве с этим набором параметров будет наиболее значимый ключевой столбец и т. д. Если запрашивается больше ключевых столбцов, чем поддерживается ядром СУБД, этот параметр игнорируется для неподдерживаемых ключевых столбцов.

ccolumn

См. prgcolumndef.

pidxunicode

Идентификатор языкового стандарта и флаги нормализации, которые будут использоваться для сравнения данных из ключевых столбцов Юникода во временной таблице.

Если этот параметр отсутствует, для сравнения всех ключевых столбцов Юникода во временной таблице будет использоваться идентификатор LCID по умолчанию. По умолчанию LCID используется английский языковой стандарт США.

Если этот параметр отсутствует, флаги нормализации по умолчанию будут использоваться для сравнения всех данных ключевых столбцов Юникода во временной таблице. Флаги нормализации по умолчанию: NORM_IGNORECASE, NORM_IGNOREKANATYPE и NORM_IGNOREWIDTH.

grbit

Группа битов, содержащих параметры, которые будут использоваться для этого вызова, которые включают ноль или более из следующих значений.

Значение

Значение

JET_bitTTErrorOnDuplicateInsertion

Этот параметр запрашивает, чтобы любая попытка вставки записи с тем же ключом индекса, что и ранее вставленная запись, немедленно завершалась сбоем с JET_errKeyDuplicate. Если этот параметр не запрашивается, то дубликата может быть обнаружена немедленно и неудачно или удалена автоматически позже в зависимости от стратегии, выбранной ядром СУБД для реализации временной таблицы на основе запрошенных функциональных возможностей.

Если эта функция не требуется, лучше не запрашивать ее. Если эта функция не запрашивается, диспетчер временных таблиц может выбрать стратегию управления временной таблицей, что приведет к повышению производительности.

JET_bitTTForceMaterialization

Этот параметр заставляет временного диспетчера таблиц отказаться от любых попыток выбрать умную стратегию управления временной таблицей, которая приведет к повышению производительности.

JET_bitTTForwardOnly

Этот параметр запрашивает создание временной таблицы только в том случае, если временный диспетчер таблиц может использовать реализацию, оптимизированную для промежуточных результатов запроса. Если какая-либо характеристика временной таблицы не позволит использовать эту оптимизацию, операция завершится сбоем с JET_errCannotMaterializeForwardOnlySort.

Побочным эффектом этого параметра является разрешение временной таблице содержать записи с повторяющимися ключами индекса. Дополнительные сведения см. в разделе JET_bitTTUnique.

Этот параметр доступен только в Windows Server 2003 и более поздних выпусках.

JET_bitTTIndexed

Этот параметр требует, чтобы временная таблица была достаточно гибкой, чтобы использовать JetSeek для поиска записей по ключу индекса.

Если эта функция не требуется, лучше не запрашивать ее. Если эта функция не запрашивается, диспетчер временных таблиц может выбрать стратегию управления временной таблицей, что приведет к повышению производительности.

JET_bitTTUnique

Этот параметр запрашивает удаление записей с повторяющимися ключами индекса из окончательного набора записей во временной таблице.

До Windows Server 2003 ядро СУБД всегда предполагало, что этот параметр действует, так как все кластеризованные индексы также должны быть первичными и, следовательно, должны быть уникальными. В Windows Server 2003 теперь можно создать временную таблицу, которая не удаляет дубликаты при указании параметра JET_bitTTForwardOnly.

Невозможно узнать, какие дубликаты выиграют, а какие будут удалены в целом. Однако при запросе параметра JET_bitTTErrorOnDuplicateInsertion первая запись с заданным ключом индекса, вставляемая во временную таблицу, всегда выигрывает.

JET_bitTTUpdatable

Этот параметр требует, чтобы временная таблица была достаточно гибкой, чтобы разрешить последующее изменение записей, которые были вставлены ранее. Если эта функция не требуется, лучше не запрашивать ее.

Если эта функция не запрашивается, диспетчер временных таблиц может выбрать стратегию управления временной таблицей, что приведет к повышению производительности.

JET_bitTTScrollable

Этот параметр требует, чтобы временная таблица была достаточно гибкой, чтобы разрешить сканирование записей в произвольном порядке и направлении с помощью JetMove.

Если эта функция не требуется, лучше не запрашивать ее. Если эта функция не запрашивается, диспетчер временных таблиц может выбрать стратегию управления временной таблицей, что приведет к повышению производительности.

JET_bitTTSortNullsHigh

Этот параметр запрашивает сортировку значений ключевого столбца NULL ближе к концу индекса, чем значения столбцов, отличных от NULL.

JET_bitTTIntrinsicLVsOnly

Запрашивает разрешение только внутренних длинных значений.

Windows 7: JET_bitTTIntrinsicLVsOnly появилась в Windows 7.

ptableid

Выходной буфер, который получит новый курсор, открытый во вновь созданной временной таблице.

prgcolumnid

Выходной буфер, который получит массив идентификаторов столбцов, созданных во время создания временной таблицы.

Идентификаторы столбцов в этом массиве в точности соответствуют входному массиву определений столбцов. В результате размер этого буфера должен соответствовать размеру входного массива.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errCannotMaterializeForwardOnlySort

Сбой JetOpenTempTable3 , так как JET_bitTTForwardOnly был указан, а временную таблицу не удалось создать с помощью оптимизации только для пересылки. Эта ошибка будет возвращена только в Windows Server 2003 и более поздних выпусках.

JET_errClientRequestToStopJetService

Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService.

JET_errIndexInvalidDef

Не удалось создать индекс, так как указано недопустимое определение индекса. JetOpenTempTable3 вернет эту ошибку, если:

  • Указан языковой стандарт, не зависящий от языка.

  • Указан недопустимый набор флагов нормализации.

Эта ошибка будет возвращена только Windows 2000.

JET_errInstanceUnavailable

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errInvalidCodePage

Член cp структуры JET_COLUMNDEF не имеет допустимой кодовой страницы. Единственными допустимыми значениями текстовых столбцов являются английский (1252) и Юникод (1200). Значение 0 означает, что будет использоваться значение по умолчанию (английский язык, 1252).

JET_errInvalidColumnType

Член coltypструктуры JET_COLUMNDEF не имеет допустимого типа столбца.

JET_errInvalidLanguageId

Не удалось создать индекс, так как была предпринята попытка использовать недопустимый идентификатор языкового стандарта. Код языкового стандарта может быть либо полностью недопустимым, либо не установлен соответствующий языковой пакет.

JET_errInvalidLCMapStringFlags

Не удалось создать индекс, так как была предпринята попытка использовать недопустимый набор флагов нормализации. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках. В Windows 2000 недопустимые флаги нормализации приведут к JET_errIndexInvalidDef.

JET_errInvalidSesid

Дескриптор сеанса недопустим или ссылается на закрытый сеанс. Эта ошибка не возвращается при любых обстоятельствах. Дескрипторы проверяются только на основе наилучших усилий.

JET_errNotInitialized

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован.

JET_errOutOfCursors

Операция завершилась сбоем, так как подсистеме не удается выделить ресурсы, необходимые для открытия нового курсора. Ресурсы курсора настраиваются с помощью JetSetSystemParameter с JET_paramMaxCursors.

JET_errOutOfMemory

Операция завершилась сбоем, так как для ее завершения было выделено недостаточно памяти.

JetOpenTempTable3 может возвращать JET_errOutOfMemory, если адресное пространство хост-процесса становится слишком фрагментировано. Диспетчер временных таблиц всегда выделяет блок адресного пространства размером 1 МБ для каждой созданной временной таблицы независимо от объема хранимых данных.

JET_errRestoreInProgress

Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом.

JET_errSessionSharingViolation

Один и тот же сеанс нельзя использовать одновременно для нескольких потоков.

Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errTermInProgress

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, завершает работу.

JET_errTooManyColumns

Предпринята попытка добавить в таблицу слишком много столбцов. Таблица может содержать не более JET_ccolFixedMost фиксированных столбцов, не более JET_ccolVarMost столбцов переменной длины и не более JET_ccolTaggedMost столбцов с тегами.

JET_errTooManyOpenIndexes

Операция завершилась сбоем, так как подсистеме не удается выделить ресурсы, необходимые для кэширования индексов таблицы. Число индексов, схема которых может быть кэширована, настраивается с помощью JetSetSystemParameter с JET_paramMaxOpenTables.

JET_errTooManyOpenTables

Операция завершилась сбоем, так как подсистеме не удается выделить ресурсы, необходимые для кэширования схемы таблицы. Количество таблиц, схема которых может быть кэширована, настраивается с помощью JetSetSystemParameter с JET_paramMaxOpenTables.

JET_errTooManySorts

Операция завершилась сбоем, так как подсистеме не удается выделить ресурсы, необходимые для создания временной таблицы. Временные ресурсы таблицы настраиваются с помощью JetSetSystemParameter с JET_paramMaxTemporaryTables.

При успешном выполнении будет возвращен курсор, открытый во вновь созданной временной таблице. Состояние временной базы данных будет подготовлено для размещения новой временной таблицы. Состояние всех обычных баз данных, используемых ядром СУБД, останется неизменным.

В случае сбоя временная таблица не будет создана, и курсор не будет возвращен. Состояние временной базы данных может быть изменено. Состояние всех обычных баз данных, используемых ядром СУБД, останется неизменным.

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Профессиональная.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

См. также:

Ошибки расширяемого обработчика хранилища
Параметры обработки ошибок
JET_COLUMNDEF
JET_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_UNICODEINDEX
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetOpenTempTable
JetRollback
JetSeek
JetSetSystemParameter
Системные параметры