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


Функция JetCreateIndex2

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

Функция JetCreateIndex2

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

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

Параметры

sesid

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

tableid

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

pindexcreate

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

cIndexCreate

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

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errCannotIndex

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

JET_errColumnNotFound

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

JET_errDensityInvalid

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

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

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

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

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

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

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

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

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

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

JET_errIndexTuplesInvalidLimits

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

JET_errIndexTuplesNonUniqueOnly

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

JET_errIndexTuplesOneColumnOnly

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

JET_errIndexTuplesSecondaryIndexOnly

Windows XP и более поздних версий. Индекс кортежа не может быть первичным индексом (то есть элемент grbitструктуры JET_INDEXCREATE не должен иметь JET_bitIndexPrimary и JET_bitIndexTuples).

JET_errIndexTuplesTextColumnsOnly

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

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP и более поздних версий. Индекс кортежа не позволяет задать элемент cbVarSegMacструктуры JET_INDEXCREATE .

JET_errInTransaction

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

JET_errInvalidgrbit

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

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

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

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

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

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

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

JET_errInvalidName

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

JET_errInvalidParameter

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

JET_errUnicodeTranslationFail

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

Комментарии

Возвращаемое значение JET_errSuccess при успешном завершении всех указанных индексов.

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

Требования

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

Клиент

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

Сервер

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

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

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

Библиотека

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

DLL

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

Юникод

Реализовано как JetCreateIndex2W (Юникод) и JetCreateIndex2A (ANSI).

См. также:

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2