Compartilhar via


Função JetOpenTemporaryTable

Aplica-se a: Windows | Windows Server

Função JetOpenTemporaryTable

A função JetOpenTemporaryTable cria uma tabela volátil com um único índice que pode ser usado para armazenar e recuperar registros, assim como uma tabela comum criada por meio de JetCreateTableColumnIndex.

Windows Vista:JetOpenTemporaryTable é introduzido no Windows Vista.

As tabelas temporárias são mais rápidas do que as tabelas comuns devido à sua natureza volátil. Eles podem classificar e executar rapidamente a remoção duplicada em conjuntos de registros quando são acessados de maneira puramente sequencial.

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

Parâmetros

sesid

A sessão que será usada para essa chamada.

popentemporarytable

Um ponteiro para uma estrutura JET_OPENTEMPORARYTABLE que contém a descrição da tabela temporária a ser criada na entrada. Após uma chamada bem-sucedida, a estrutura contém o identificador para as identificações temporárias de tabela e coluna.

Valor Retornado

Essa função retorna o tipo de dados JET_ERR com um dos seguintes códigos de retorno. Para obter mais informações sobre os possíveis erros do ESE, consulte Erros extensíveis do mecanismo de armazenamento e parâmetros de tratamento de erros.

Código de retorno

Descrição

JET_errSuccess

A operação foi concluída com sucesso.

JET_errOutOfMemory

A operação falhou porque não foi possível alocar memória suficiente para concluí-la.

JetOpenTemporaryTable poderá retornar JET_errOutOfMemory se o espaço de endereço do processo de host ficar muito fragmentado. O gerenciador de tabelas temporário alocará uma parte de 1 MB de espaço de endereço para cada tabela temporária criada, independentemente da quantidade de dados armazenada.

JET_errInvalidParameter

Um dos parâmetros fornecidos continha um valor inesperado ou a combinação de vários valores de parâmetro resultou em um resultado inesperado.

Esse erro é retornado por JetOpenTemporaryTable nas seguintes condições:

  • O membro cbStruct da estrutura JET_OPENTEMPORARYTABLE não corresponde a uma versão dessa estrutura compatível com essa versão do mecanismo de banco de dados

  • O membro cbKeyMost da estrutura JET_OPENTEMPORARYTABLE é menor que JET_cbKeyMostMin.

  • O membro cbKeyMost da estrutura JET_OPENTEMPORARYTABLE é maior que o maior valor com suporte para o tamanho da página do banco de dados para a instância (JET_paramDatabasePageSize). Consulte o parâmetro JET_paramKeyMost na lista de Parâmetros Informativos para obter mais informações.

  • O membro cbVarSegMac da estrutura JET_OPENTEMPORARYTABLE é maior que o membro cbKeyMost .

JET_errNotInitialized

A operação não pode ser concluída porque a instância associada à sessão ainda não foi inicializada.

JET_errClientRequestToStopJetService

A operação não pode ser concluída porque todas as atividades na instância associada à sessão cessaram como resultado de uma chamada para JetStopService.

JET_errInstanceUnavailable

A operação não pode ser concluída porque a instância associada à sessão encontrou um erro fatal que exige que o acesso a todos os dados seja revogado para proteger a integridade desses dados.

Windows XP: Esse erro só será retornado pelo Windows XP e versões posteriores.

JET_errTermInProgress

A operação não pode ser concluída porque a instância associada à sessão está sendo desligada.

JET_errRestoreInProgress

A operação não pode ser concluída porque uma operação de restauração está em andamento na instância associada à sessão.

JET_errSessionSharingViolation

A mesma sessão não pode ser usada para mais de um thread ao mesmo tempo.

Windows XP: Esse erro só será retornado pelo Windows XP e versões posteriores.

JET_errInvalidSesid

O identificador de sessão é inválido ou refere-se a uma sessão fechada.

Nota Esse erro não é retornado em todas as circunstâncias. Os identificadores são validados apenas com base no melhor esforço.

JET_errOutOfCursors

A operação falhou porque o mecanismo não pode alocar os recursos necessários para abrir um novo cursor. Os recursos de cursor são configurados usando JetSetSystemParameter com JET_paramMaxCursors.

JET_errTooManySorts

A operação falhou porque o mecanismo não pode alocar os recursos necessários para criar uma tabela temporária. Os recursos temporários da tabela são configurados usando JetSetSystemParameter com JET_paramMaxTemporaryTables.

JET_errCannotMaterializeForwardOnlySort

Falha no JetOpenTemporaryTable porque JET_bitTTForwardOnly foi especificado e a tabela temporária especificada não pôde ser criada usando a otimização somente de encaminhamento.

Windows Server 2003: Esse erro só será retornado pelo Windows Server 2003 e versões posteriores.

JET_errTooManyColumns

Foi feita uma tentativa de adicionar muitas colunas à tabela. Uma tabela não pode ter mais do que JET_ccolFixedMost colunas fixas, não mais do que JET_ccolVarMost colunas de comprimento variável e não mais do que JET_ccolTaggedMost colunas marcadas.

JET_errTooManyOpenTables

A operação falhou porque o mecanismo não pode alocar os recursos necessários para armazenar em cache o esquema da tabela. Para configurar o número de tabelas que têm esquemas que podem ser armazenados em cache, use JetSetSystemParameter com JET_paramMaxOpenTables.

JET_errInvalidCodePage

O membro cp da estrutura JET_COLUMNDEF não foi definido como uma página de código válida. Os únicos valores válidos para colunas de texto são inglês (1252) e Unicode (1200). Um valor igual a 0 significa que o padrão será usado (inglês, 1252).

JET_errInvalidColumnType

O membro coltyp do JET_COLUMNDEF não foi definido como um tipo de coluna válido.

JET_errInvalidLanguageId

O índice não pôde ser criado porque foi feita uma tentativa de usar uma ID de localidade inválida. A ID da localidade pode ser completamente inválida ou o pacote de idiomas associado pode não estar instalado.

JET_errInvalidLCMapStringFlags

O índice não pôde ser criado porque foi feita uma tentativa de usar um conjunto inválido de sinalizadores de normalização.

Windows XP: Esse erro só será retornado pelo Windows XP e versões posteriores.

Windows 2000: No Windows 2000, sinalizadores de normalização inválidos resultarão em JET_errIndexInvalidDef.

JET_errIndexInvalidDef

O índice não pôde ser criado porque uma definição de índice inválida foi especificada. JetOpenTemporaryTable retornará esse erro sob as seguintes condições:

  • A localidade Neutra da Linguagem é especificada.

  • Um conjunto inválido de sinalizadores de normalização é especificado.

Windows 2000: Esse erro só será retornado pelo Windows 2000.

JET_errTooManyOpenIndexes

A operação falhou porque o mecanismo não pode alocar os recursos necessários para armazenar em cache os índices da tabela. Para configurar o número de índices que têm esquemas que podem ser armazenados em cache, use JetSetSystemParameter com JET_paramMaxOpenTables.

Em caso de êxito, um cursor aberto na tabela temporária recém-criada será retornado. O estado do banco de dados temporário será preparado para conter a nova tabela temporária. O estado de todos os bancos de dados comuns em uso pelo mecanismo de banco de dados permanecerá inalterado.

Em caso de falha, a tabela temporária não será criada e um cursor não será retornado. O estado do banco de dados temporário pode ser alterado. O estado de todos os bancos de dados comuns em uso pelo mecanismo de banco de dados permanecerá inalterado.

Comentários

As tabelas temporárias não dão suporte ao complemento completo das opções de definição de coluna que normalmente são compatíveis com o mecanismo de banco de dados. Na verdade, há suporte apenas para JET_bitColumnFixed e JET_bitColumnTagged. Isso significa que não é possível criar um incremento automático, uma versão ou uma coluna com valores múltiplos em uma tabela temporária. Por fim, não há suporte para colunas de atualização de escrow porque elas só podem ser usadas por uma sessão por vez. Se qualquer uma dessas opções for solicitada, elas serão ignoradas.

Tabelas temporárias não dão suporte a valores padrão. Se uma definição de coluna for fornecida que contenha uma especificação de valor padrão, essa especificação será ignorada.

As tabelas temporárias são retornadas ao chamador como resultado de muitas funções ESE diferentes. Por exemplo, JetGetIndexInfo com o conjunto de opções JET_IdxInfo retornará uma tabela temporária contendo uma lista de todas as colunas de chave em um determinado índice. As tabelas temporárias seguem as mesmas regras de ciclo de vida das tabelas temporárias comuns, conforme descrito aqui.

Tabelas temporárias também são usadas internamente pelo mecanismo de banco de dados para muitas tarefas. A mais importante dessas tarefas é a criação de um índice sobre uma tabela existente. Uma tabela temporária será usada para classificar as chaves de índice usadas para construir esse índice.

Todas as tabelas temporárias são armazenadas no banco de dados temporário. O banco de dados temporário é um arquivo de banco de dados especial que é mantido durante o tempo de vida de uma instância do ESE e é excluído quando essa instância é desligada ou reiniciada. O local do banco de dados temporário pode ser configurado usando JetSetSystemParameter com JET_paramTempPath. O posicionamento do banco de dados temporário no disco em relação aos arquivos de log de transações e aos arquivos de banco de dados pode ser importante se o aplicativo fizer uso intenso de tabelas temporárias ou criar índices com frequência.

O ciclo de vida de uma tabela temporária está vinculado aos cursores que fazem referência a ela. Se todos os cursores que fazem referência a uma tabela temporária forem fechados, implicitamente ou explicitamente, a tabela temporária será excluída. Se uma tabela temporária for criada dentro de uma transação e essa transação for revertida posteriormente, a tabela temporária será excluída porque todos os cursores que a referenciaram neste momento serão implicitamente fechados. Novos cursores podem referenciar uma tabela temporária somente por meio do uso de JetDupCursor. Nesse caso, os novos cursores serão posicionados na primeira entrada de índice da tabela temporária. JetDupCursor só funcionará durante determinadas fases de uso para a tabela temporária. Confira os comentários sobre os recursos temporários de cursor de tabela para obter mais informações. Não é possível fazer referência a uma tabela temporária de mais de uma sessão por vez.

Cuidado Há um problema importante no JetDupCursor que afeta tabelas temporárias. Se for feita uma tentativa de duplicar uma tabela temporária que está no modo somente encaminhamento, o cursor resultante não será criado corretamente e funcionará incorretamente. Ainda é seguro duplicar um cursor em uma tabela temporária materializada.

O gerenciador de tabelas temporário pode implementar uma tabela temporária de três maneiras. O primeiro método é manter uma tabela na memória. Essa estratégia é a mais rápida, mas só pode ser usada para tabelas pequenas, simples e temporárias. O segundo método é criar uma classificação baseada em disco que pode ser controlada usando um iterador somente de encaminhamento. Essa estratégia só pode ser usada em determinadas circunstâncias e é a maneira mais rápida de classificar e remover duplicatas de um conjunto de dados muito grande. O terceiro método é criar uma Árvore B+ no banco de dados temporário para manter a tabela temporária. Essa estratégia é a mais lenta, mas a mais versátil, e é conhecida como uma tabela temporária materializada. Essas estratégias podem ser usadas em combinação para obter, em última análise, a funcionalidade solicitada da tabela temporária.

Quando a tabela temporária não é materializada, ela é usada principalmente em duas fases principais. A primeira fase é a fase de inserção em que a tabela é preenchida com seu conjunto de dados inicial. Durante essa fase, somente a inserção de dados é permitida. Essa fase termina quando é feita uma tentativa de mover o cursor usando JetMove ou JetSeek. A segunda fase é a fase de extração de dados. Durante essa fase, os dados armazenados na tabela temporária podem ser extraídos de acordo com os recursos solicitados quando a tabela temporária foi criada.

Funcionalidades temporárias do cursor de tabela

Quando a tabela temporária é materializada, o cursor tem os seguintes recursos, mas pode ser ainda mais limitado pelas opções solicitadas:

Quando a tabela temporária não é materializada e está na fase de inserção, o cursor tem os seguintes recursos, mas pode ser ainda mais limitado pelas opções solicitadas:

Quando a tabela temporária não é materializada e está na fase de extração, o cursor tem os seguintes recursos, mas pode ser ainda mais limitado pelas opções solicitadas:

Requisitos

Requisito Valor

Cliente

Requer o Windows Vista.

Servidor

Requer o Windows Server 2008.

Cabeçalho

Declarado em Esent.h.

Biblioteca

Use ESENT.lib.

DLL

Requer ESENT.dll.

Consulte Também

JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
Parâmetros informativos
Parâmetros de banco de dados temporários