JetCreateTableColumnIndex 函数

适用于:Windows |Windows服务器

JetCreateTableColumnIndex 函数

JetCreateTableColumnIndex 函数在 ESE 数据库中创建一个表,其中包含一组初始索引和一组来自JET_TABLECREATE结构数组的初始列。 名称 JetCreateTableColumnIndex 来自对象创建顺序。 它首先创建表、列,最后创建索引。

    JET_ERR JET_API JetCreateTableColumnIndex(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in_out      JET_TABLECREATE* ptablecreate
    );

参数

sesid

用于 API 调用的数据库会话上下文。

dbid

用于 API 调用的数据库标识符。

ptablecreate

指向 JET_TABLECREATE 结构的指针,用于定义要创建的表。 有关详细信息 ,请参阅JET_TABLECREATE

返回值

此函数使用以下返回代码之一返回 JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅可扩展存储引擎错误错误处理参数

返回代码

说明

JET_errSuccess

操作已成功完成。

JET_errCallbackNotResolved

无法解析回调函数。 可能无法找到 DLL,或者找不到 DLL 中的函数。 启用足够的日志记录后,事件日志将提供更多详细信息。

JET_errCannotIndex

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

JET_errCannotNestDDL

如果 ptablecreate-grbit> 指定JET_bitTableCreateTemplateTable,但 ptablecreate-szTemplateTableName> 设置为 NULL。

JET_errColumnDuplicate

列已存在。

JET_errColumnNotFound

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

JET_errColumnRedundant

尝试添加冗余列。 每个表不应有多个自动创建列,并且每个表不应包含多个版本列。

JET_errDensityInvalid

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

JET_errDDLNotInheritable

表示在JET_TABLECREATE结构的 szTemplateTableName 成员中命名的表未标记为模板表 (即该表没有JET_bitTableCreateTemplateTable设置) 。

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

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

  • 主索引是条件 (,即JET_INDEXCREATE结构的 grbit 成员已设置JET_bitIndexPrimary,JET_INDEXCREATE结构的 cConditionalColumn 成员大于零) 。

  • Windows Server 2003 及更高版本。 尝试使用元组限制创建元组索引,但在JET_INDEXCREATE结构中传递 ptuplelimits 成员 (也就是说,JET_INDEXCREATE结构的 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 及更高版本。 元组索引不能是唯一的 (,也就是说,JET_INDEXCREATE结构的 grbit 成员不得同时设置 JET_bitIndexPrimary 和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_errInvalidCodePage

JET_COLUMNCREATE结构的 cp 成员未设置为有效的代码页。 文本列的唯一有效值是英语 (1252) 和 Unicode (1200) 。 值为 0 表示将使用默认值 (英语、1252) 。

JET_errInvalidColumnType

JET_COLUMNCREATE结构的 coltyp 成员未设置为有效的列类型。

JET_errInvalidCreateIndex

此错误的一些原因如下:

JET_errInvalidgrbit

JET_TABLECREATE或JET_TABLECREATE2中指定了无效的 grbit 成员组合。

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

  • 主索引具有指定的忽略位 (,即JET_bitIndexPrimary通过JET_bitIndexIgnoreNull、JET_bitIndexIgnoreAnyNull或JET_bitIndexIgnoreFirstNull) 传递。

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

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

JET_errInvalidLanguageId

(LCID) 传递无效的区域设置 ID) 是通过 (JET_INDEXCREATE结构中的 pidxunicode 成员指向的JET_UNICODEINDEX结构的 lcid 成员或JET_INDEXCREATE结构) 的 lcid 字段传递的。

JET_errInvalidParameter

给定了无效参数。 一些可能的原因是:

JET_errRecordTooBig

记录太大了。 所有固定列JET_COLUMNCREATE结构的 cbMax 成员的总和不得超过特定值。

JET_errTableDuplicate

该表已存在。

JET_errTooManyColumns

尝试向表添加过多列。 表不能超过JET_ccolFixedMost固定列、不超过JET_ccolVarMost可变长度列,且不超过JET_ccolTaggedMost标记列。

JET_errUnicodeTranslationFail

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

注解

调用 JetCreateTableColumnIndex 与调用 JetCreateTableColumnIndex2 相同, JET_TABLECREATE2 结构中的每个字段包含 相应JET_TABLECREATE字段的值,但有以下例外:

  • JET_TABLECREATE2.cbStruct 设置为 sizeof ( JET_TABLECREATE2)

  • JET_TABLECREATE2.szCallback 设置为 NULL

  • JET_TABLECREATE2.cbtyp 设置为 0

有关详细信息,请参阅 JetCreateTableColumnIndex2

JetOpenTable 一样,当应用程序使用返回的 tableid 完成时,通常应该使用 JetCloseTable 关闭它。

要求

要求

客户端

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

Server

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

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

Unicode

实现为 JetCreateTableColumnIndexW (Unicode) 和 JetCreateTableColumnIndexA (ANSI) 。

另请参阅

JET_DBID
JET_ERR
JET_GRBIT
JET_TABLEID
JET_TABLECREATE
JET_TABLECREATE2
JetAddColumn
JetCreateTableColumnIndex
JetCreateTableColumnIndex2