Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Windows | Windows Server
Funzione JetOpenTemporaryTable2
La funzione JetOpenTemporaryTable2 crea una tabella volatile con un singolo indice che può essere usato per archiviare e recuperare record, proprio come una tabella normale creata tramite JetCreateTableColumnIndex.
Windows Vista:JetOpenTemporaryTable2 viene introdotto in Windows Vista.
Le tabelle temporanee sono più veloci rispetto alle tabelle normali a causa della loro natura volatile. Possono ordinare e eseguire rapidamente la rimozione duplicata nei set di record quando sono accessibili in modo puramente sequenziale.
JET_ERR JET_API JetOpenTemporaryTable2(
__in JET_SESID sesid,
__in JET_OPENTEMPORARYTABLE* popentemporarytable
);
Parametri
sesid
Sessione che verrà usata per questa chiamata.
popentemporarytable
Puntatore a una struttura JET_OPENTEMPORARYTABLE contenente la descrizione della tabella temporanea da creare in input. Dopo una chiamata riuscita, la struttura contiene l'handle per le identificazioni di tabella e colonna temporanee.
Valore restituito
Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.
Codice restituito |
Descrizione |
|---|---|
JET_errSuccess |
Operazione riuscita. |
JET_errOutOfMemory |
L'operazione non è riuscita perché non è possibile allocare memoria sufficiente per completarla. JetOpenTemporaryTable2 può restituire JET_errOutOfMemory se lo spazio indirizzi del processo host diventa troppo frammentato. Gestione tabelle temporanee alloca un blocco di 1 MB di spazio indirizzi per ogni tabella temporanea creata indipendentemente dalla quantità di dati archiviata. |
JET_errInvalidParameter |
Uno dei parametri forniti contiene un valore imprevisto o la combinazione di diversi valori di parametro ha generato un risultato imprevisto. Questo errore viene restituito da JetOpenTemporaryTable2 nelle condizioni seguenti:
|
JET_errNotInitialized |
Impossibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata. |
JET_errClientRequestToStopJetService |
L'operazione non può essere completata perché tutte le attività nell'istanza associata alla sessione hanno interrotto come risultato di una chiamata a JetStopService. |
JET_errInstanceUnavailable |
L'operazione non può essere completata perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede che l'accesso a tutti i dati venga revocato per proteggere l'integrità dei dati. Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errTermInProgress |
Impossibile completare l'operazione perché l'istanza associata alla sessione viene arrestata. |
JET_errRestoreInProgress |
L'operazione non può essere completata perché un'operazione di ripristino è in corso nell'istanza associata alla sessione. |
JET_errSessionSharingViolation |
La stessa sessione non può essere usata contemporaneamente per più thread. Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errInvalidSesid |
L'handle di sessione non è valido o fa riferimento a una sessione chiusa. Nota Questo errore non viene restituito in tutte le circostanze. Gli handle vengono convalidati solo su base ottimale. |
JET_errOutOfCursors |
Operazione non riuscita perché il motore non può allocare le risorse necessarie per aprire un nuovo cursore. Le risorse del cursore vengono configurate usando JetSetSystemParameter con JET_paramMaxCursors. |
JET_errTooManySorts |
Operazione non riuscita perché il motore non può allocare le risorse necessarie per creare una tabella temporanea. Le risorse di tabella temporanee vengono configurate usando JetSetSystemParameter con JET_paramMaxTemporaryTables. |
JET_errCannotMaterializeForwardOnlySort |
JetOpenTemporaryTable2 non è riuscito perché è stato specificato JET_bitTTForwardOnly e non è stato possibile creare la tabella temporanea specificata usando l'ottimizzazione di sola inoltro. Windows Server 2003: Questo errore verrà restituito solo da Windows Server 2003 e versioni successive. |
JET_errTooManyColumns |
È stato effettuato un tentativo di aggiungere troppe colonne alla tabella. Una tabella non può avere più di JET_ccolFixedMost colonne fisse, non più di JET_ccolVarMost colonne a lunghezza variabile e non più di JET_ccolTaggedMost colonne contrassegnate. |
JET_errTooManyOpenTables |
Operazione non riuscita perché il motore non può allocare le risorse necessarie per memorizzare nella cache lo schema della tabella. Per configurare il numero di tabelle con schemi che possono essere memorizzati nella cache, usare JetSetSystemParameter con JET_paramMaxOpenTables. |
JET_errInvalidCodePage |
Il membro cp della struttura JET_COLUMNDEF non è stato impostato su una tabella codici valida. Gli unici valori validi per le colonne di testo sono inglese (1252) e Unicode (1200). Un valore pari a 0 indica che il valore predefinito verrà usato (inglese, 1252). |
JET_errInvalidColumnType |
Il membro coltyp del JET_COLUMNDEF non è stato impostato su un tipo di colonna valido. |
JET_errInvalidLanguageId |
Impossibile creare l'indice perché è stato effettuato un tentativo di usare un ID delle impostazioni locali non valido. L'ID delle impostazioni locali potrebbe non essere completamente valido o il Language Pack associato potrebbe non essere installato. |
JET_errInvalidLCMapStringFlags |
Impossibile creare l'indice perché è stato effettuato un tentativo di usare un set non valido di flag di normalizzazione. Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive. Windows 2000: In Windows 2000 i flag di normalizzazione non validi generano JET_errIndexInvalidDef. |
JET_errIndexInvalidDef |
Impossibile creare l'indice perché è stata specificata una definizione di indice non valida. JetOpenTemporaryTable2 restituirà questo errore nelle condizioni seguenti:
Windows 2000: Questo errore verrà restituito solo da Windows 2000. |
JET_errTooManyOpenIndexes |
Operazione non riuscita perché il motore non può allocare le risorse necessarie per memorizzare nella cache gli indici della tabella. Per configurare il numero di indici con schemi che possono essere memorizzati nella cache, usare JetSetSystemParameter con JET_paramMaxOpenTables. |
In caso di esito positivo, verrà restituito un cursore aperto nella tabella temporanea appena creata. Lo stato del database temporaneo verrà preparato per contenere la nuova tabella temporanea. Lo stato di tutti i database normali in uso dal motore di database rimarrà invariato.
In caso di errore, la tabella temporanea non verrà creata e non verrà restituito un cursore. Lo stato del database temporaneo può essere modificato. Lo stato di tutti i database normali in uso dal motore di database rimarrà invariato.
Commenti
Le tabelle temporanee non supportano il complemento completo delle opzioni di definizione di colonna che sono normalmente supportate dal motore di database. Infatti, sono supportati solo JET_bitColumnFixed e JET_bitColumnTagged. Ciò significa che non è possibile creare una colonna con incremento automatico, versione o multivalore in una tabella temporanea. Infine, le colonne di aggiornamento di escrow non sono supportate perché possono essere usate solo da una sessione alla volta. Se viene richiesta una di queste opzioni, verranno ignorate.
Le tabelle temporanee non supportano i valori predefiniti. Se viene fornita una definizione di colonna che contiene una specifica di valore predefinita, tale specifica verrà ignorata.
Le tabelle temporanee vengono restituite al chiamante in seguito a molte funzioni ESE diverse. Ad esempio, JetGetIndexInfo con il set di opzioni JET_IdxInfo restituirà una tabella temporanea contenente un elenco di tutte le colonne chiave in un determinato indice. Le tabelle temporanee seguono le stesse regole del ciclo di vita delle normali tabelle temporanee descritte di seguito.
Le tabelle temporanee vengono usate internamente dal motore di database per molte attività. L'aspetto più importante di queste attività è la creazione di un indice su una tabella esistente. Verrà utilizzata una tabella temporanea per ordinare le chiavi di indice utilizzate per costruire tale indice.
Tutte le tabelle temporanee vengono archiviate nel database temporaneo. Il database temporaneo è un file di database speciale che viene mantenuto durante la durata di un'istanza ESE e viene eliminato quando tale istanza viene arrestata o riavviata. Il percorso del database temporaneo può essere configurato usando JetSetSystemParameter con JET_paramTempPath. Il posizionamento del database temporaneo su disco relativo ai file di log delle transazioni e ai file di database può essere importante se l'applicazione usa in modo temporaneo tabelle temporanee o crea spesso indici.
Il ciclo di vita di una tabella temporanea è associato ai cursori che vi fanno riferimento. Se tutti i cursori che fanno riferimento a una tabella temporanea vengono chiusi, in modo implicito o esplicito, la tabella temporanea verrà eliminata. Se viene creata una tabella temporanea all'interno di una transazione e successivamente viene eseguito il rollback della transazione, la tabella temporanea verrà eliminata perché tutti i cursori a cui si fa riferimento in questo momento verranno chiusi in modo implicito. I nuovi cursori possono fare riferimento a una tabella temporanea solo tramite l'uso di JetDupCursor. In questo caso, i nuovi cursori verranno posizionati sulla prima voce di indice della tabella temporanea. JetDupCursor funzionerà solo durante determinate fasi di utilizzo per la tabella temporanea. Per altre informazioni, vedere le osservazioni relative alle funzionalità temporanee del cursore della tabella. Non è possibile fare riferimento a una tabella temporanea da più sessioni alla volta.
Attenzione Esiste un problema importante in JetDupCursor che influisce sulle tabelle temporanee. Se si tenta di duplicare una tabella temporanea in modalità forward-only, il cursore risultante non verrà creato correttamente e non funzionerà correttamente. È comunque possibile duplicare un cursore su una tabella temporanea materializzata.
Gestione tabelle temporanee può implementare una tabella temporanea in tre modi. Il primo metodo consiste nel mantenere una tabella in memoria. Questa strategia è il più veloce, ma può essere usata solo per tabelle temporanee di piccole dimensioni, semplici e temporanee. Il secondo metodo consiste nel creare un ordinamento basato su disco che può essere guidato usando un iteratore forward-only. Questa strategia può essere usata solo in determinate circostanze ed è il modo più rapido per ordinare e rimuovere duplicati da un set di dati di grandi dimensioni. Il terzo metodo consiste nel creare un albero B+ nel database temporaneo per contenere la tabella temporanea. Questa strategia è la più lenta, ma la più versatile e viene definita tabella temporanea materializzata. Queste strategie possono essere usate in combinazione per ottenere in definitiva la funzionalità richiesta della tabella temporanea.
Quando la tabella temporanea non viene materializzata, viene usata principalmente in due fasi principali. La prima fase è la fase di inserimento in cui la tabella viene popolata con il set di dati iniziale. Durante questa fase, è consentito solo l'inserimento dei dati. Questa fase termina quando viene effettuato un tentativo di spostare il cursore usando JetMove o JetSeek. La seconda fase è la fase di estrazione dei dati. Durante questa fase, i dati archiviati nella tabella temporanea possono essere estratti in base alle funzionalità richieste al momento della creazione della tabella temporanea.
Funzionalità temporanee del cursore di tabella
Quando la tabella temporanea viene materializzata, il cursore ha le funzionalità seguenti, ma potrebbe essere ulteriormente limitato dalle opzioni richieste:
Quando la tabella temporanea non viene materializzata e si trova nella fase di inserimento, il cursore ha le funzionalità seguenti, ma potrebbe essere ulteriormente limitato dalle opzioni richieste:
-
Nota Causa la transizione alla fase di estrazione.
-
Nota Causa la transizione alla fase di estrazione.
Quando la tabella temporanea non viene materializzata e si trova nella fase di estrazione, il cursore ha le funzionalità seguenti, ma può essere ulteriormente limitato dalle opzioni richieste:
-
Nota Se si tenta di duplicare una tabella temporanea in modalità forward-only, il cursore risultante non verrà creato correttamente e non funzionerà correttamente. È comunque possibile duplicare un cursore su una tabella temporanea materializzata.
Requisiti
| Requisito | Valore |
|---|---|
Client |
Richiede Windows Vista. |
Server |
Richiede Windows Server 2008. |
Intestazione |
Dichiarato in Esent.h. |
Libreria |
Usare ESENT.lib. |
DLL |
Richiede ESENT.dll. |
Vedere anche
JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
Parametri informativi
Parametri di database temporanei