Compartir a través de


Función JetOpenTemporaryTable

Se aplica a: Windows | Windows Server

Función JetOpenTemporaryTable

La función JetOpenTemporaryTable crea una tabla volátil con un único índice que se puede usar para almacenar y recuperar registros, al igual que una tabla normal creada a través de JetCreateTableColumnIndex.

Windows Vista:JetOpenTemporaryTable se presenta en Windows Vista.

Las tablas temporales son más rápidas que las tablas normales debido a su naturaleza volátil. Pueden ordenar y realizar rápidamente la eliminación de duplicados en conjuntos de registros cuando se accede a ellos de una manera puramente secuencial.

    JET_ERR JET_API JetOpenTemporaryTable(
      __in          JET_SESID sesid,
      __in          JET_OPENTEMPORARYTABLE* popentemporarytable
    );

Parámetros

sesid

La sesión que se usará para esta llamada.

popentemporarytable

Puntero a una estructura de JET_OPENTEMPORARYTABLE que contiene la descripción de la tabla temporal que se va a crear en la entrada. Después de una llamada correcta, la estructura contiene el identificador de las identificaciones de columna y tabla temporal.

Valor devuelto

Esta función devuelve el JET_ERR tipo de datos con uno de los siguientes códigos de retorno. Para obtener más información sobre los posibles errores de ESE, vea Extensible Storage Engine Errors and Error Handling Parameters.

Código devuelto

Descripción

JET_errSuccess

La operación se ha completado correctamente.

JET_errOutOfMemory

Error en la operación porque no se pudo asignar suficiente memoria para completarla.

JetOpenTemporaryTable puede devolver JET_errOutOfMemory si el espacio de direcciones del proceso host se vuelve demasiado fragmentado. El administrador de tablas temporales asignará un fragmento de 1 MB de espacio de direcciones para cada tabla temporal creada independientemente de la cantidad de datos almacenada.

JET_errInvalidParameter

Uno de los parámetros proporcionados contenía un valor inesperado o la combinación de varios valores de parámetro dio como resultado un resultado inesperado.

JetOpenTemporaryTable devuelve este error en las siguientes condiciones:

  • El miembro cbStruct de la estructura JET_OPENTEMPORARYTABLE no corresponde a una versión de esta estructura compatible con esa versión del motor de base de datos.

  • El miembro cbKeyMost de la estructura JET_OPENTEMPORARYTABLE es menor que JET_cbKeyMostMin.

  • El miembro cbKeyMost de la estructura JET_OPENTEMPORARYTABLE es mayor que el mayor valor admitido para el tamaño de página de la base de datos para la instancia (JET_paramDatabasePageSize). Consulte el parámetro JET_paramKeyMost en la lista de parámetros informativos para obtener más información.

  • El miembro cbVarSegMac de la estructura JET_OPENTEMPORARYTABLE es mayor que el miembro cbKeyMost .

JET_errNotInitialized

La operación no se puede completar porque la instancia asociada a la sesión aún no se ha inicializado.

JET_errClientRequestToStopJetService

La operación no se puede completar porque toda la actividad de la instancia asociada a la sesión ha dejado de funcionar como resultado de una llamada a JetStopService.

JET_errInstanceUnavailable

La operación no se puede completar porque la instancia asociada a la sesión ha encontrado un error irrecuperable que requiere que se revoque el acceso a todos los datos para proteger la integridad de esos datos.

Windows XP: Este error solo lo devolverá Windows XP y versiones posteriores.

JET_errTermInProgress

La operación no se puede completar porque la instancia asociada a la sesión se está cerrando.

JET_errRestoreInProgress

La operación no se puede completar porque hay una operación de restauración en curso en la instancia asociada a la sesión.

JET_errSessionSharingViolation

No se puede usar la misma sesión para más de un subproceso al mismo tiempo.

Windows XP: Este error solo lo devolverá Windows XP y versiones posteriores.

JET_errInvalidSesid

El identificador de sesión no es válido o hace referencia a una sesión cerrada.

Nota Este error no se devuelve en todas las circunstancias. Los identificadores solo se validan con el mejor esfuerzo.

JET_errOutOfCursors

Error en la operación porque el motor no puede asignar los recursos necesarios para abrir un nuevo cursor. Los recursos de cursor se configuran mediante JetSetSystemParameter con JET_paramMaxCursors.

JET_errTooManySorts

Error en la operación porque el motor no puede asignar los recursos necesarios para crear una tabla temporal. Los recursos de tabla temporal se configuran mediante JetSetSystemParameter con JET_paramMaxTemporaryTables.

JET_errCannotMaterializeForwardOnlySort

Error de JetOpenTemporaryTable porque se especificó JET_bitTTForwardOnly y no se pudo crear la tabla temporal especificada con la optimización de solo avance.

Windows Server 2003: Este error solo lo devolverá Windows Server 2003 y versiones posteriores.

JET_errTooManyColumns

Se intentó agregar demasiadas columnas a la tabla. Una tabla no puede tener más de JET_ccolFixedMost columnas fijas, más de JET_ccolVarMost columnas de longitud variable y no más de JET_ccolTaggedMost columnas etiquetadas.

JET_errTooManyOpenTables

Error en la operación porque el motor no puede asignar los recursos necesarios para almacenar en caché el esquema de la tabla. Para configurar el número de tablas que tienen esquemas que se pueden almacenar en caché, use JetSetSystemParameter con JET_paramMaxOpenTables.

JET_errInvalidCodePage

El miembro cp de la estructura JET_COLUMNDEF no se estableció en una página de códigos válida. Los únicos valores válidos para las columnas de texto son Inglés (1252) y Unicode (1200). Un valor de 0 significa que se usará el valor predeterminado (inglés, 1252).

JET_errInvalidColumnType

El miembro coltyp del JET_COLUMNDEF no se estableció en un tipo de columna válido.

JET_errInvalidLanguageId

No se pudo crear el índice porque se intentó usar un identificador de configuración regional no válido. Es posible que el identificador de configuración regional no sea totalmente válido o que el paquete de idioma asociado no esté instalado.

JET_errInvalidLCMapStringFlags

No se pudo crear el índice porque se intentó usar un conjunto no válido de marcas de normalización.

Windows XP: Este error solo lo devolverá Windows XP y versiones posteriores.

Windows 2000: En Windows 2000, las marcas de normalización no válidas producirán JET_errIndexInvalidDef.

JET_errIndexInvalidDef

No se pudo crear el índice porque se especificó una definición de índice no válida. JetOpenTemporaryTable devolverá este error en las siguientes condiciones:

  • Se especifica la configuración regional neutral del idioma.

  • Se especifica un conjunto no válido de marcas de normalización.

Windows 2000: Windows 2000 solo devolverá este error.

JET_errTooManyOpenIndexes

Error en la operación porque el motor no puede asignar los recursos necesarios para almacenar en caché los índices de la tabla. Para configurar el número de índices que tienen esquemas que se pueden almacenar en caché, use JetSetSystemParameter con JET_paramMaxOpenTables.

Si se ejecuta correctamente, se devolverá un cursor abierto en la tabla temporal recién creada. El estado de la base de datos temporal se preparará para contener la nueva tabla temporal. El estado de cualquier base de datos normal en uso por el motor de base de datos permanecerá sin cambios.

Si se produce un error, no se creará la tabla temporal y no se devolverá un cursor. Se puede cambiar el estado de la base de datos temporal. El estado de cualquier base de datos normal en uso por el motor de base de datos permanecerá sin cambios.

Comentarios

Las tablas temporales no admiten el complemento completo de las opciones de definición de columna que normalmente son compatibles con el motor de base de datos. De hecho, solo se admiten JET_bitColumnFixed y JET_bitColumnTagged. Esto significa que no es posible crear una columna de incremento automático, versión o multivalor en una tabla temporal. Por último, no se admiten columnas de actualización de custodia porque solo se pueden usar en una sesión cada vez. Si se solicita alguna de estas opciones, se omitirán.

Las tablas temporales no admiten valores predeterminados. Si se proporciona una definición de columna que contiene una especificación de valor predeterminada, esa especificación se omitirá.

Las tablas temporales se devuelven al autor de la llamada como resultado de muchas funciones ESE diferentes. Por ejemplo, JetGetIndexInfo con el conjunto de opciones JET_IdxInfo devolverá una tabla temporal que contiene una lista de todas las columnas de clave de un índice determinado. Las tablas temporales siguen las mismas reglas de ciclo de vida que las tablas temporales normales que se describen aquí.

El motor de base de datos también usa internamente tablas temporales para muchas tareas. La más importante de estas tareas es la creación de un índice en una tabla existente. Se usará una tabla temporal para ordenar las claves de índice que se usan para construir ese índice.

Todas las tablas temporales se almacenan en la base de datos temporal. La base de datos temporal es un archivo de base de datos especial que se mantiene durante la vigencia de una instancia de ESE y se elimina cuando esa instancia se cierra o se reinicia. La ubicación de la base de datos temporal se puede configurar mediante JetSetSystemParameter con JET_paramTempPath. La colocación de la base de datos temporal en el disco en relación con los archivos de registro de transacciones y los archivos de base de datos puede ser importante si la aplicación usa con mucha frecuencia tablas temporales o crea índices con frecuencia.

El ciclo de vida de una tabla temporal está asociado a los cursores que hacen referencia a ella. Si se cierran todos los cursores que hacen referencia a una tabla temporal, ya sea implícita o explícitamente, se eliminará la tabla temporal. Si se crea una tabla temporal dentro de una transacción y esa transacción se revierte posteriormente, la tabla temporal se eliminará porque los cursores a los que se hace referencia en este momento se cerrarán implícitamente. Los nuevos cursores pueden hacer referencia a una tabla temporal solo mediante el uso de JetDupCursor. En este caso, los nuevos cursores se colocarán en la primera entrada de índice de la tabla temporal. JetDupCursor solo funcionará durante determinadas fases de uso para la tabla temporal. Consulte los comentarios relativos a las funcionalidades temporales del cursor de tabla para obtener más información. No es posible hacer referencia a una tabla temporal desde más de una sesión a la vez.

Precaución Hay un problema importante en JetDupCursor que afecta a las tablas temporales. Si se intenta duplicar una tabla temporal que está en modo de solo avance, el cursor resultante no se creará correctamente y no funcionará correctamente. Todavía es seguro duplicar un cursor sobre una tabla temporal materializada.

El administrador de tablas temporales puede implementar una tabla temporal de tres maneras. El primer método es mantener una tabla en memoria. Esta estrategia es la más rápida, pero solo se puede usar para tablas pequeñas, simples y temporales. El segundo método consiste en crear una ordenación basada en disco que se pueda controlar mediante un iterador de solo avance. Esta estrategia solo se puede usar en determinadas circunstancias y es la manera más rápida de ordenar y quitar duplicados de un conjunto de datos muy grande. El tercer método consiste en crear un árbol B+ en la base de datos temporal para contener la tabla temporal. Esta estrategia es la más lenta, pero la más versátil, y se conoce como una tabla temporal materializada. Estas estrategias se pueden usar en combinación para lograr en última instancia la funcionalidad solicitada de la tabla temporal.

Cuando la tabla temporal no se materializa, se usa principalmente en dos fases principales. La primera fase es la fase de inserción donde la tabla se rellena con su conjunto de datos inicial. Durante esta fase, solo se permite la inserción de datos. Esta fase finaliza cuando se intenta mover el cursor mediante JetMove o JetSeek. La segunda fase es la fase de extracción de datos. Durante esta fase, los datos almacenados en la tabla temporal se pueden extraer según las funcionalidades solicitadas cuando se creó la tabla temporal.

Funcionalidades de cursor de tabla temporal

Cuando se materializa la tabla temporal, el cursor tiene las siguientes funcionalidades, pero puede limitarse aún más por las opciones solicitadas:

Cuando la tabla temporal no se materializa y se encuentra en la fase de inserción, el cursor tiene las siguientes funcionalidades, pero puede estar limitada aún más por las opciones solicitadas:

Cuando la tabla temporal no se materializa y se encuentra en la fase de extracción, el cursor tiene las siguientes funcionalidades, pero puede limitarse aún más por las opciones solicitadas:

Requisitos

Requisito Value

Cliente

Requiere Windows Vista.

Servidor

Requiere Windows Server 2008.

Encabezado

Declarado en Esent.h.

Library

Use ESENT.lib.

Archivo DLL

Requiere ESENT.dll.

Consulte también

JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
Parámetros informativos
Parámetros de base de datos temporales