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:
|
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:
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:
-
Nota Provoca la transición a la fase de extracción.
-
Nota Provoca la transición a la fase de extracción.
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:
-
Nota 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.
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