JetOpenTempTable2 函数

适用于: Windows |Windows Server

JetOpenTempTable2 函数

JetOpenTempTable2 函数创建具有单个索引的临时表,该表可用于存储和检索记录,就像使用 JetCreateTableColumnIndex 创建的普通表一样。 此函数还具有一个区域设置 ID,可用于比较临时表中的 Unicode 键列数据。 但是,临时表的易失性比普通表快得多。 在以纯顺序方式访问记录集时,它们还可用于非常快速地对记录集进行排序和执行重复删除。

    JET_ERR JET_API JetOpenTempTable2(
      __in          JET_SESID sesid,
      __in          const JET_COLUMNDEF* prgcolumndef,
      __in          unsigned long ccolumn,
      __in          unsigned long lcid,
      __in          JET_GRBIT grbit,
      __out         JET_TABLEID* ptableid,
      __out         JET_COLUMNID* prgcolumnid
    );

参数

sesid

要使用的会话。

prgcolumndef

要在临时表中创建的列的列定义。

与临时表一起使用的列定义选项存在重要限制。 有关详细信息,请参阅备注部分。

除了常用的列定义选项外,还可以指定仅与临时表上下文相关的以下零个或多个选项。

含义

JET_bitColumnTTDescending

临时表的键列的排序顺序应为降序而不是升序。 如果指定此选项而不JET_bitColumnTTKey则忽略此选项。

JET_bitColumnTTKey

该列将是临时表的键列。

输入数组中指定的此选项的列定义顺序将确定临时表的每个键列的优先级。 设置了此选项的数组中的第一个列定义将是最重要的键列,依此类说。 如果请求的键列数超过数据库引擎可支持的键列数,则对于不受支持的键列,将忽略此选项。

ccolumn

请参阅 prgcolumndef

lcid

用于比较临时表中任何 Unicode 键列数据的区域设置 ID。

只要计算机上安装了相应的语言包,就可以使用任何区域设置。 一个例外是,中性语言区域设置 (LCID 为零) 是非法的。

在 Windows Server 2003 及更高版本中,如果为此参数指定了中性语言区域设置,则将改用美国英语) 的默认区域设置 ID (。 这是为了允许零值表示默认值,而不是非法值。

如果此参数不存在且 pidxunicode 参数不存在,则默认 LCID 将用于比较临时表中的任何 Unicode 键列数据。 默认 LCID 为美国英语区域设置。

grbit

一组位,其中包含要用于此调用的选项,其中包括以下零个或多个内容。

含义

JET_bitTTErrorOnDuplicateInsertion

此选项请求插入索引键与以前插入的记录相同的记录的任何尝试都将立即失败,并JET_errKeyDuplicate。 如果未请求此选项,则可能会立即检测到重复项并失败,或者以后可能会无提示删除,具体取决于数据库引擎选择的策略,以便根据请求的功能实现临时表。

如果不需要此功能,则最好不要请求此功能。 如果未请求此功能,则临时表管理器可能能够选择一种策略来管理临时表,从而提高性能。

JET_bitTTForceMaterialization

此选项强制临时表管理器放弃任何尝试,以选择一种巧妙的策略来管理临时表,从而增强性能。

JET_bitTTForwardOnly

此选项请求仅当临时表管理器可以使用针对中间查询结果优化的实现时,才创建临时表。 如果临时表的任何特征会阻止使用此优化,则操作将失败并JET_errCannotMaterializeForwardOnlySort。

此选项的副作用是允许临时表包含具有重复索引键的记录。 有关详细信息,请参阅JET_bitTTUnique。

此选项仅适用于 Windows Server 2003 及更高版本。

JET_bitTTIndexed

此选项要求临时表足够灵活,以允许使用 JetSeek 按索引键查找记录。

如果不需要此功能,则最好不要请求此功能。 如果未请求此功能,则临时表管理器可能能够选择一种策略来管理临时表,从而提高性能。

JET_bitTTScrollable

此选项要求临时表足够灵活,以允许使用 JetMove 按任意顺序和方向扫描记录。

如果不需要此功能,则最好不要请求此功能。 如果未请求此功能,则临时表管理器可能能够选择一种策略来管理临时表,从而提高性能。

JET_bitTTSortNullsHigh

此选项请求 NULL 键列值排序更接近索引末尾,而不是非 NULL 键列值。

JET_bitTTUnique

此选项请求从临时表中的最后一组记录中删除具有重复索引键的记录。

在 Windows Server 2003 之前,数据库引擎始终假定此选项生效,因为所有聚集索引也必须是主键,因此必须是唯一的。 从 Windows Server 2003 开始,现在可以在指定 JET_bitTTForwardOnly 选项时创建不删除重复项的临时表。

无法知道哪个重复项将获胜,哪些重复项一般会被丢弃。 但是,当请求JET_bitTTErrorOnDuplicateInsertion选项时,具有要插入到临时表中的给定索引键的第一条记录将始终获胜。

JET_bitTTUpdatable

此选项要求临时表足够灵活,以允许随后更改以前插入的记录。 如果不需要此功能,则最好不要请求此功能。

如果未请求此功能,则临时表管理器可能能够选择一种策略来管理临时表,从而提高性能。

JET_bitTTIntrinsicLVsOnly

请求仅允许内部长值。

Windows 7:windows 7 中引入了 JET_bitTTIntrinsicLVsOnly

ptableid

将接收在新创建的临时表上打开的新游标的输出缓冲区。

prgcolumnid

将接收在创建临时表期间生成的列 ID 数组的输出缓冲区。

此数组中的列 ID 将与列定义的输入数组完全对应。 因此,此缓冲区的大小必须与输入数组的大小相对应。

返回值

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

返回代码

说明

JET_errSuccess

操作已成功完成。

JET_errCannotMaterializeForwardOnlySort

JetOpenTempTable2 失败,因为指定了JET_bitTTForwardOnly,并且无法使用仅向前优化创建指定的临时表。 此错误仅由 Windows Server 2003 及更高版本返回。

JET_errClientRequestToStopJetService

无法完成操作,因为与会话关联的实例上的所有活动都因调用 JetStopService 而停止。

JET_errInstanceUnavailable

无法完成操作,因为与会话关联的实例遇到严重错误,要求撤销对所有数据的访问权限以保护该数据的完整性。 此错误仅由 Windows XP 及更高版本返回。

JET_errInvalidCodePage

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

JET_errInvalidColumnType

JET_COLUMNDEFcoltyp 字段未设置为有效的列类型。

JET_errIndexInvalidDef

无法创建索引,因为指定的索引定义无效。

JetOpenTempTable2 将在以下情况下返回此错误:

  • 指定了中性语言区域设置。

  • 指定了一组无效的规范化标志。

此错误仅由 Windows 2000 返回。

JET_errInvalidLanguageId

无法创建索引,因为尝试使用的区域设置 ID 无效。 区域设置 ID 可能完全无效,或者未安装关联的语言包。

JET_errInvalidLCMapStringFlags

无法创建索引,因为尝试使用一组无效的规范化标志。 此错误仅由 Windows XP 及更高版本返回。 在 Windows 2000 上,无效的规范化标志将导致JET_errIndexInvalidDef。

JET_errNotInitialized

无法完成操作,因为与会话关联的实例尚未初始化。

JET_errOutOfCursors

操作失败,因为引擎无法分配打开新游标所需的资源。 游标资源是使用 JetSetSystemParameterJET_paramMaxCursors 配置的。

JET_errOutOfMemory

操作失败,因为无法分配足够的内存来完成此操作。

如果主机进程的地址空间过于分散,JetOpenTempTable2 可以返回JET_errOutOfMemory。 无论要存储的数据量如何,临时表管理器始终都会为每个创建的临时表分配 1MB 的地址空间块。

JET_errRestoreInProgress

无法完成该操作,因为正在对与会话关联的实例执行还原操作。

JET_errSessionSharingViolation

同一会话不能同时用于多个线程。

此错误仅由 Windows XP 及更高版本返回。

JET_errTermInProgress

无法完成操作,因为正在关闭与会话关联的实例。

JET_errTooManyColumns

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

JET_errTooManyOpenIndexes

操作失败,因为引擎无法分配缓存表索引所需的资源。 可以使用 带有 JET_paramMaxOpenTables 的 JetSetSystemParameter 配置可缓存其架构 索引数。

JET_errTooManyOpenTables

操作失败,因为引擎无法分配缓存表架构所需的资源。 可以使用带有JET_paramMaxOpenTablesJetSetSystemParameter 配置其架构可以缓存的表数。

JET_errTooManySorts

操作失败,因为引擎无法分配创建临时表所需的资源。 临时表资源是使用 JetSetSystemParameterJET_paramMaxTemporaryTables配置的。

成功后,将返回在新创建的临时表上打开的游标。 临时数据库的状态将准备好包含新的临时表。 数据库引擎使用的任何普通数据库的状态将保持不变。

失败时,不会创建临时表,也不会返回游标。 临时数据库的状态可能会更改。 数据库引擎使用的任何普通数据库的状态将保持不变。

备注

请参阅 JetOpenTempTable

要求

要求

客户端

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

服务器

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

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

另请参阅

JET_COLUMNDEF
JET_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_UNICODEINDEX
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
系统参数