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


Функция JetCreateIndex4W

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

Функция JetCreateIndex4W создает индексы данных в базе данных расширяемого ядра хранилища (ESE), которую можно использовать для быстрого поиска определенных данных.

Функция JetCreateIndex4W появилась в Windows 8 операционной системе.

JET_ERR JET_API JetCreateIndex4W(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_INDEXCREATE2* pindexcreate,
  __in          unsigned long cIndexCreate
);

Параметры

sesid

Контекст сеанса базы данных, используемый для вызова API.

tableid

Таблица, в которой будет создан индекс.

pindexcreate

Массив JET_INDEXCREATE2 структур, каждая из которых определяет создаваемый индекс.

cIndexCreate

Количество элементов в массиве pindexcreate .

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errCannotIndex

Предпринята попытка индексировать столбец escrow-update или SLV (обратите внимание, что столбцы SLV устарели).

JET_errColumnNotFound

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

JET_errDensityInvalid

Эта ошибка будет возвращена, если член ulDensityструктуры JET_INDEXCREATE2 имеет значение меньше 20 или больше 100.

JET_errIndexDuplicate

Предпринята попытка определить два идентичных индекса.

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

Указано недопустимое определение индекса. Ниже приведены некоторые возможные причины этой ошибки.

  • Первичный индекс является условным (гбит-членJET_INDEXCREATE2 имеет JET_bitIndexPrimary задано, а элемент cConditionalColumnJET_INDEXCREATE2 больше нуля).

  • Применяется к версиям Windows, начиная с Windows Server 2003. Предпринята попытка создать индекс кортежа с ограничениями кортежей, но без передачи сведений в член ptuplelimits в JET_INDEXCREATE2 (то есть у grbitJET_bitIndexTupleLimits задан, но указатель ptuplelimits имеет значение NULL).

  • Передача недопустимого определения ключа в элементе szKeyструктуры JET_INDEXCREATE2 . Сведения о допустимых определениях см. в разделе JET_INDEXCREATE2.

  • Установка элемента cbVarSegMac в JET_INDEXCREATE2 больше JET_cbPrimaryKeyMost (для первичного индекса) или больше JET_cbSecondaryKeyMost (для вторичного индекса).

  • Передача недопустимой комбинации для определяемого пользователем индекса Юникода (который имеет бит JET_bitIndexUnicode , заданный в элементе grbitJET_INDEXCREATE2). Некоторые распространенные причины могут быть в том, что поле pidxunicode структуры JET_INDEXCREATE2 имеет значение NULL или код языка, указанный в структуре pidxunicode, является недопустимым.

  • Указание многозначного столбца для первичного индекса.

  • Попытка индексировать слишком много условных столбцов. Элемент cConditionalColumn структуры JET_INDEXCREATE2 не должен быть больше JET_ccolKeyMost.

JET_errIndexTuplesInvalidLimits

Применяется к версиям Windows, начиная с Windows XP. Указана JET_TUPLELIMITS структура, и ее ограничения не поддерживаются. Дополнительные сведения см. в разделе примечаний структуры JET_TUPLELIMITS .

JET_errIndexTuplesNonUniqueOnly

Применяется к версиям Windows, начиная с Windows XP. Индекс кортежа не может быть уникальным (гбит не должен иметь JET_bitIndexTuples и JET_bitIndexUnique ).

JET_errIndexTuplesOneColumnOnly

Применяется к версиям Windows, начиная с Windows XP. Индекс кортежа может находиться только над одним столбцом (то есть элемент grbitструктуры JET_INDEXCREATE2 имеет JET_bitIndexTuples задано, а элемент szKeyструктуры JET_INDEXCREATE2 указывает несколько столбцов).

JET_errIndexTuplesSecondaryIndexOnly

Применяется к версиям Windows, начиная с Windows XP. Индекс кортежа не может быть первичным индексом (то есть элемент grbitструктуры JET_INDEXCREATE2 не должен иметь JET_bitIndexPrimary и JET_bitIndexTuples ).

JET_errIndexTuplesTextColumnsOnly

Применяется к версиям Windows, начиная с Windows XP. Индекс кортежа может находиться только в текстовом столбце или столбце Юникода. Попытка индексировать другие столбцы (например, двоичные столбцы) приведет к JET_errIndexTuplesTextColumnsOnly.

JET_errIndexTuplesVarSegMacNotAllowed

Применяется к версиям Windows, начиная с Windows XP. Индекс кортежа не позволяет задать элемент cbVarSegMacструктуры JET_INDEXCREATE2 .

JET_errInTransaction

Предпринята попытка создать индекс без сведений о версии во время транзакции.

JET_errInvalidgrbit

Определение индекса недопустимо, так как элемент grbitструктуры JET_INDEXCREATE2 содержит несогласованные значения. Ниже приведены некоторые возможные причины.

  • В основном индексе указан бит пропуска (JET_bitIndexPrimary был передан с одним из JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull или JET_bitIndexIgnoreFirstNull).

  • Пустой индекс не пропускает поля NULL (то есть элемент grbitструктуры JET_INDEXCREATE2 имеет JET_bitIndexEmpty задано, но не имеет JET_bitIndexIgnoreAnyNull ).

  • Передача структуры JET_CONDITIONALCOLUMN с недопустимым элементом grbit . См . JET_CONDITIONALCOLUMN.

При одновременном создании нескольких индексов (т. е. если параметр cIndexCreate больше единицы), ни один из индексов не может содержать следующие биты:

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

Был передан недопустимый код языкового стандарта (LCID) (либо через член lcid в структуре JET_UNICODEINDEX , на который элемент pidxunicode в структуре JET_INDEXCREATE2 содержит указатель, либо через член lcidструктуры JET_INDEXCREATE2 ).

JET_errInvalidName

Указано недопустимое имя индекса. Дополнительные сведения см. в разделе JET_INDEXCREATE2 .

JET_errInvalidParameter

В API передан недопустимый параметр. Ниже приведены некоторые причины, по которым эта ошибка может быть возвращена.

JET_errUnicodeTranslationFail

Произошла ошибка при попытке нормализовать столбец Юникода. Это может быть вызвано отсутствием системных ресурсов.

JET_errSpaceHintsInvalid

Элемент структуры пространственных указаний JET не был правильным или не может быть практическим.

Комментарии

Функция JetCreateIndex4W выполняет итерацию по индексам, указанным в параметре pindexcreate , и иногда прерывается при первом сбое. Все индексы после первого индекса с ошибкой, возможно, не были выполнены, даже если элемент errструктуры JET_INDEXCREATE2 содержит JET_errSuccess.

Требования

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

Клиент

Требуется Windows 8.

Сервер

Требуется Windows Server 2012.

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

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

Библиотека

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

DLL

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

См. также раздел

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE2
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2
JET_SPACEHINTS