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

尝试对托管更新列或 SLV 列编制索引, (请注意,SLV 列) 已弃用。

JET_errColumnNotFound

尝试对不存在的列编制索引。 尝试对不存在的列进行有条件索引也可能产生此错误。

JET_errDensityInvalid

如果JET_INDEXCREATE结构的 ulDensity 成员设置为小于 20 或大于 100 的数字,将返回此错误。

JET_errIndexDuplicate

尝试定义两个相同的索引。

JET_errIndexHasPrimary

尝试为一个表指定多个主索引。 一个表必须恰好有一个主索引。 如果未指定主索引,则数据库引擎将以透明方式创建一个主索引。

JET_errIndexInvalidDef

指定的索引定义无效。 收到此错误的一些可能原因包括:

  • 主索引是条件 (JET_INDEXCREATEgrbit 成员已设置JET_bitIndexPrimary,JET_INDEXCREATEcConditionalColumn 成员大于零) 。

  • Windows Server 2003 及更高版本。 尝试创建具有元组限制的元组索引,但没有在 JET_INDEXCREATE (中的 ptuplelimits 成员中传递信息,即 grbit 已设置JET_bitIndexTupleLimits,但 ptuplelimits 指针为 NULL) 。

  • JET_INDEXCREATE 结构的 szKey 成员中传入无效的密钥定义。 有关有效定义的讨论 ,请参阅JET_INDEXCREATE

  • JET_INDEXCREATE 中的 cbVarSegMac 成员设置为大于主索引) 的 JET_cbPrimaryKeyMost (或大于辅助索引) 的 JET_cbSecondaryKeyMost (。

  • 为用户定义的 Unicode 索引传递无效组合, (在 JET_INDEXCREATE) 的 grbit 成员中设置了 JET_bitIndexUnicode 位。 一些常见原因可能是 JET_INDEXCREATE 结构的 pidxunicode 字段为 NULL,或者 pidxunicode 结构中指定的 LCID 无效。

  • 为主索引指定多值列。

  • 尝试为过多的条件列编制索引。 JET_INDEXCREATE 结构的 cConditionalColumn 成员不能大于 JET_ccolKeyMost。

JET_errIndexTuplesInvalidLimits

Windows XP 及更高版本。 指定了 JET_TUPLELIMITS 结构,不支持其限制。 请参阅 JET_TUPLELIMITS 结构的备注部分。

JET_errIndexTuplesNonUniqueOnly

Windows XP 及更高版本。 元组索引不能是唯一的, (grbit 不能同时设置JET_bitIndexTuples和JET_bitIndexUnique) 。

JET_errIndexTuplesOneColumnOnly

Windows XP 及更高版本。 元组索引只能位于单个列 (即,JET_INDEXCREATE 结构的 grbit 成员具有JET_bitIndexTuples集,JET_INDEXCREATE 结构的 szKey 成员指定多个列) 。

JET_errIndexTuplesSecondaryIndexOnly

Windows XP 及更高版本。 元组索引不能是主索引 (即,JET_INDEXCREATE结构的 grbit 成员不得同时设置JET_bitIndexPrimary和JET_bitIndexTuples) 。

JET_errIndexTuplesTextColumnsOnly

Windows XP 及更高版本。 元组索引只能位于文本或 Unicode 列上。 尝试为其他列编制索引 (例如,) 二进制列将导致JET_errIndexTuplesTextColumnsOnly。

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP 及更高版本。 元组索引不允许设置 JET_INDEXCREATE 结构的 cbVarSegMac 成员。

JET_errInTransaction

尝试在事务中创建没有版本信息的索引。

JET_errInvalidgrbit

索引定义无效,因为JET_INDEXCREATE结构的 grbit 成员包含不一致的值。 一些可能的原因包括:

  • 主索引指定了忽略位, (JET_bitIndexPrimary通过JET_bitIndexIgnoreNull、JET_bitIndexIgnoreAnyNull或JET_bitIndexIgnoreFirstNull) 之一传递。

  • 空索引不会忽略任何 NULL 字段 (即,JET_INDEXCREATE 结构的 grbit 成员已设置JET_bitIndexEmpty,但没有JET_bitIndexIgnoreAnyNull设置) 。

  • 传入具有无效 grbit 成员的JET_CONDITIONALCOLUMN结构。 请参阅 JET_CONDITIONALCOLUMN

(一次创建多个索引时,如果 cIndexCreate 参数大于一个) ,则任何索引都不能包含以下任何位:

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

(LCID) , (通过 JET_UNICODEINDEX 结构中的 lcid 成员(JET_INDEXCREATE 结构中的 pidxunicode 成员包含指向的指针)或通过JET_INDEXCREATE结构的lcid 成员) 传入无效的区域设置 ID。

JET_errInvalidName

指定的索引名称无效。 有关详细信息 ,请参阅JET_INDEXCREATE

JET_errInvalidParameter

将无效参数传递到 API 中。 可能返回此错误的一些原因包括:

JET_errUnicodeTranslationFail

尝试规范化 Unicode 列时出错。 这可由系统资源耗尽导致。

备注

成功完成指定的所有索引后,将JET_errSuccess返回值。

JetCreateIndex2 循环访问 pindexcreate 中给定的索引,有时会在第一次失败时中止。 即使 JET_INDEXCREATE 结构的错误成员包含JET_errSuccess,第一个索引之后的任何索引也可能不会尝试。

要求

要求

客户端

需要 Windows Vista、Windows XP 或 Windows 2000 Professional。

服务器

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

Unicode

实现为 JetCreateIndex2W (Unicode) 和 JetCreateIndex2A (ANSI) 。

另请参阅

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2