JetCreateTable 函数

适用于: Windows |Windows Server

JetCreateTable 函数

JetCreateTable 函数在 ESE 数据库中创建一个空表。

    JET_ERR JET_API JetCreateTable(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in          const tchar* szTableName,
      __in          unsigned long lPages,
      __in          unsigned long lDensity,
      __out         JET_TABLEID* ptableid
    );

parameters

sesid

要使用的数据库会话上下文。

dbid

要使用的数据库标识符。

szTableName

要创建的索引的名称。

必须根据以下规则设置名称的格式:

  • 小于 JET_cbNameMost,不包括终止 NULL。

  • 由以下字符集组成:0 到 9、A 到 Z、a 到 z、 以及除“!” (感叹号) 、“、” (逗号) “、”[“ (左方括号) 和右方括号) (标点”]“(即 ASCII 字符0x20、0x22到0x2d、0x2f到0x5a、0x5c、0x5d到0x7f)。

  • 不以空格开头。

  • 由至少一个非空格字符组成。

lPages

要为表分配的初始数据库页数。 如果在此表中插入了许多行,则指定大于 1 的数字可以减少碎片。

lDensity

表密度(以百分点为单位)。 数字必须为 0 或介于 20 到 100 的范围内。 传递 0 表示应使用默认值。 默认值为“80”。

ptableid

成功后,表标识符将在此字段中返回。 如果 API 不返回JET_errSuccess,则该值为未定义。

返回值

此函数返回具有以下返回代码之一 的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_TABLECREATEJET_TABLECREATE2 结构的 ulDensity 成员中传递了无效的密度。

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_errIndexTuplesVarSegMacNotAllowed

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

JET_errIndexTuplesTextColumnsOnly

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

JET_errInTransaction

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

JET_errInvalidCodePage

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

JET_errInvalidColumnType

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

JET_errInvalidCreateIndex

发生此错误的一些原因:

JET_errInvalidgrbit

JET_TABLECREATEJET_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_TABLECREATE2 结构的 rgcolumncreate 成员为 NULL。

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

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

  • JET_INDEXCREATE 结构的 cbStruct 成员未设置为 sizeof ( JET_INDEXCREATE ) 。

JET_errRecordTooBig

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

JET_errTableDuplicate

该表已存在。

JET_errTooManyColumns

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

JET_errUnicodeTranslationFail

尝试规范化 Unicode 列时出错。 这可能是由系统资源用完导致的。

备注

JetCreateTable 创建不包含任何列的表。 若要添加列,请参阅 JetAddColumn

在内部, JetCreateTable 调用 JetCreateTableColumnIndex2,并在 JET_TABLECREATE2 结构中填充:

  • JET_TABLECREATE2.cbStruct = sizeof ( JET_TABLECREATE2 )

  • JET_TABLECREATE2.szTableName = szTableName

  • JET_TABLECREATE2.ulPages = lPage

  • JET_TABLECREATE2.ulDensity = lDensity

  • JET_TABLECREATE2.tableid = JET_tableidNil

内部 JET_TABLECREATE2 结构的所有其他字段都设置为零或 NULL。 输出时, ptableid 将设置为 JET_TABLECREATE2.tableid。

有关更多详细信息,请参阅 JetCreateTableColumnIndex2

JetOpenTable 一样,使用从 JET_TABLECREATE2 结构返回的 tableid 成员完成应用程序时,它通常应使用 JetCloseTable 关闭。

要求

要求

客户端

需要 Windows Vista、Windows XP 或 Windows 2000 专业版。

服务器

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

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

Unicode

实现为 JetCreateTableW (Unicode) 和 JetCreateTableA (ANSI) 。

另请参阅

JET_DBID
JET_ERR
JET_GRBIT
JET_TABLEID
JET_TABLECREATE2
JetAddColumn
JetCreateTableColumnIndex
JetCreateTableColumnIndex2