JetCreateTableColumnIndex4W 函数

适用于: Windows |Windows Server

JetCreateTableColumnIndex4W 函数在 Extensible Storage Engine (ESE ( 数据库中创建一个表,其中包含一组初始索引和一组来自JET_TABLECREATE3结构的初始列。 JET_TABLECREATE3 结构允许指定回调函数。

JetCreateTableColumnIndex4W 函数是在Windows 8操作系统中引入的。

JET_ERR JET_API JetCreateTableColumnIndex4W(
  __in          JET_SESID sesid,
  __in          JET_DBID dbid,
  __in_out      JET_TABLECREATE3* ptablecreate
);

parameters

sesid

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

dbid

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

ptablecreate

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

返回值

此函数使用下表中列出的返回代码之一返回 JET_ERR 数据类型。 有关可能的可扩展存储 Enginge (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_INDEXCREATE2结构的 ulDensity 成员设置为小于 20 或大于 100 的数字,将返回此错误。

JET_errDDLNotInheritable

表示JET_TABLECREATE3结构的 szTemplateTableName 成员中名为 的表未标记为模板表 (即该表未) 设置JET_bitTableCreateTemplateTable参数值。

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

指定的索引定义无效。 下面是此错误的一些可能原因:

  • 主索引是条件 (即,JET_INDEXCREATE2 结构的 grbit 成员设置了 JET_bitIndexPrimary 值,并且 JET_INDEXCREATE2 结构的 cConditionalColumn 成员大于零) 。

  • 适用于从 Windows Server 2003 开始的 Windows Server 操作系统版本。 尝试创建具有元组限制的元组索引,但没有在JET_INDEXCREATE2结构中传递 ptuplelimits 成员 (即,JET_INDEXCREATE2 结构的 grbit 成员已设置JET_bitIndexTupleLimits值,但 ptuplelimits 指针) 为 null。

  • JET_INDEXCREATE2 结构的 szKey 成员中传入无效的密钥定义。 有关有效定义的信息,请参阅 JET_INDEXCREATE2

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

  • 为用户定义的 Unicode 索引传递无效组合 (在 JET_INDEXCREATE2 结构的 grbit 成员中设置了 JET_bitIndexUnicode 值位) 。 一些常见原因包括JET_INDEXCREATE2结构的 pidxunicode 成员为 null,或在 pidxunicode 结构中指定的 LCID 无效。

  • 为主索引指定多值列。

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

JET_errIndexTuplesInvalidLimits

适用于从 Windows XP 开始的 Windows 版本。 指定了 JET_TUPLELIMITS 结构,不支持其限制。 有关详细信息,请参阅 JET_TUPLELIMITS 结构的备注部分。

JET_errIndexTuplesNonUniqueOnly

适用于从 Windows XP 开始的 Windows 版本。 元组索引不能是唯一的, (也就是说,JET_INDEXCREATE2结构的 grbit 成员不能同时设置JET_bitIndexPrimary值和JET_bitIndexUnique值) 。

JET_errIndexTuplesOneColumnOnly

适用于从 Windows XP 开始的 Windows 版本。 元组索引只能位于单个列 (即,如果JET_INDEXCREATE2结构的 grbit 成员设置了JET_bitIndexTuples值,并且 JET_INDEXCREATE2 结构的 szKey 成员指定了多个列) 。

JET_errIndexTuplesSecondaryIndexOnly

适用于从 Windows XP 开始的 Windows 版本。 元组索引不能是主索引 (即,JET_INDEXCREATE2 结构的 grbit 成员不得同时设置JET_bitIndexPrimary和JET_bitIndexTuples) 。

JET_errIndexTuplesTextColumnsOnly

适用于从 Windows XP 开始的 Windows 版本。 元组索引只能位于文本或 Unicode 列上。 尝试为其他列(如二进制列) )编制索引 (将导致JET_errIndexTuplesTextColumnsOnly响应代码。

JET_errIndexTuplesVarSegMacNotAllowed

适用于从 Windows XP 开始的 Windows 版本。 元组索引不允许设置 JET_INDEXCREATE2 结构的 cbVarSegMac 成员。

JET_errInTransaction

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

JET_errInvalidCodePage

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

JET_errInvalidColumnType

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

JET_errInvalidCreateIndex

下面是发生此错误的一些原因:

JET_errInvalidgrbit

JET_TABLECREATE3 结构中指定了无效的 grbit 成员组合。

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

  • 主索引指定了一个忽略位 (即,JET_bitIndexPrimary值是随) JET_bitIndexIgnoreNull、JET_bitIndexIgnoreAnyNull或JET_bitIndexIgnoreFirstNull值一起传递的。

  • 空索引不会忽略任何 null 成员 (即,JET_INDEXCREATE2 结构的 grbit 成员设置了JET_bitIndexEmpty值,但没有) 设置JET_bitIndexIgnoreAnyNull值。

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

JET_errInvalidLanguageId

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

JET_errInvalidParameter

提供了无效的参数。 下面是一些可能的原因:

  • JET_TABLECREATE3 结构的 rgcolumncreate 成员为 null。

  • JET_TABLECREATE2 结构的 rgcolumncreate 成员中给定的某个JET_COLUMNCREATE结构的 cbStruct 成员未设置为 size of ( JET_COLUMNCREATE ) 。

  • JET_INDEXCREATE2 结构的 cbKey 成员设置为零。

  • JET_INDEXCREATE2 结构的 cbStruct 成员未设置为 size of ( JET_INDEXCREATE2 ) 。

JET_errRecordTooBig

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

JET_errTableDuplicate

该表已存在。

JET_errTooManyColumns

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

JET_errUnicodeTranslationFail

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

JET_errSpaceHintsInvalid

JET 空间提示结构的元素不正确或不可操作。

备注

JetCreateTableColumnIndex4W 函数创建具有初始列和索引集的表。 可以通过 JetAddColumn、JetDeleteColumnJetDeleteColumn2JetCreateIndex、JetCreateIndex2JetCreateIndex3JetCreateIndex4WJetDeleteIndex 函数动态添加和删除其他列和索引。

JetOpenTable 函数一样,使用返回的 tableid 完成应用程序时, JetCloseTable 函数应关闭应用程序。

要求

要求

客户端

需要Windows 8。

服务器

需要Windows Server 2012。

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

另请参阅

JET_CBTYP
JET_DBID
JET_ERR
JET_GRBIT
JET_INDEXCREATE
JET_INDEXCREATE2
JET_SESID
JET_TABLEID
JET_TABLECREATE2
JET_TABLECREATE3
JET_TUPLELIMITS
JetAddColumn
JetCreateIndex
JetCreateIndex2
JetCreateIndex3
JetCreateTable
JetCreateTableColumnIndex
JetDeleteColumn
JetDeleteColumn2