JetOpenTemporaryTable-Funktion
Gilt für: Windows | Windows Server
JetOpenTemporaryTable-Funktion
Die JetOpenTemporaryTable-Funktion erstellt eine flüchtige Tabelle mit einem einzelnen Index, der zum Speichern und Abrufen von Datensätzen verwendet werden kann, genau wie eine normale Tabelle, die über JetCreateTableColumnIndex erstellt wird.
Windows Vista:JetOpenTemporaryTable wird in Windows Vista eingeführt.
Temporäre Tabellen sind aufgrund ihrer volatilen Natur schneller als gewöhnliche Tabellen. Sie können schnell doppeltes Entfernen von Datensatzsätzen sortieren und durchführen, wenn auf sie rein sequenziell zugegriffen wird.
JET_ERR JET_API JetOpenTemporaryTable(
__in JET_SESID sesid,
__in JET_OPENTEMPORARYTABLE* popentemporarytable
);
Parameter
sesid
Die Sitzung, die für diesen Aufruf verwendet wird.
popentemporarytable
Ein Zeiger auf eine JET_OPENTEMPORARYTABLE-Struktur , die die Beschreibung der temporären Tabelle enthält, die bei der Eingabe erstellt werden soll. Nach einem erfolgreichen Aufruf enthält die Struktur das Handle für die temporären Tabellen- und Spaltenidentifikationen.
Rückgabewert
Diese Funktion gibt den JET_ERR-Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.
Rückgabecode |
Beschreibung |
---|---|
JET_errSuccess |
Der Vorgang wurde erfolgreich abgeschlossen. |
JET_errOutOfMemory |
Der Vorgang ist fehlgeschlagen, da nicht genügend Arbeitsspeicher zugewiesen werden konnte, um ihn abzuschließen. JetOpenTemporaryTable kann JET_errOutOfMemory zurückgeben, wenn der Adressraum des Hostprozesses zu fragmentiert wird. Der temporäre Tabellen-Manager weist jeder temporären Tabelle unabhängig von der gespeicherten Datenmenge einen Adressraum von 1 MB zu. |
JET_errInvalidParameter |
Einer der bereitgestellten Parameter enthielt einen unerwarteten Wert, oder die Kombination mehrerer Parameterwerte führte zu einem unerwarteten Ergebnis. Dieser Fehler wird von JetOpenTemporaryTable unter den folgenden Bedingungen zurückgegeben:
|
JET_errNotInitialized |
Der Vorgang kann nicht abgeschlossen werden, da die instance, die der Sitzung zugeordnet war, noch nicht initialisiert wurde. |
JET_errClientRequestToStopJetService |
Der Vorgang kann nicht abgeschlossen werden, da alle Aktivitäten auf dem instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurde. |
JET_errInstanceUnavailable |
Der Vorgang kann nicht abgeschlossen werden, da bei der instance, die der Sitzung zugeordnet ist, ein schwerwiegender Fehler aufgetreten ist, der erfordert, dass der Zugriff auf alle Daten widerrufen wird, um die Integrität dieser Daten zu schützen. Windows XP: Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errTermInProgress |
Der Vorgang kann nicht abgeschlossen werden, da die instance, die der Sitzung zugeordnet ist, heruntergefahren wird. |
JET_errRestoreInProgress |
Der Vorgang kann nicht abgeschlossen werden, da ein Wiederherstellungsvorgang für die instance ausgeführt wird, die der Sitzung zugeordnet ist. |
JET_errSessionSharingViolation |
Dieselbe Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden. Windows XP: Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errInvalidSesid |
Das Sitzungshandle ist ungültig oder bezieht sich auf eine geschlossene Sitzung. Hinweis Dieser Fehler wird nicht unter allen Umständen zurückgegeben. Handles werden nur auf Der Grundlage der besten Leistung überprüft. |
JET_errOutOfCursors |
Der Vorgang ist fehlgeschlagen, da das Modul die Ressourcen nicht zuordnen kann, die zum Öffnen eines neuen Cursors erforderlich sind. Cursorressourcen werden mithilfe von JetSetSystemParameter mit JET_paramMaxCursors konfiguriert. |
JET_errTooManySorts |
Fehler beim Vorgang, da das Modul die Ressourcen nicht zuordnen kann, die zum Erstellen einer temporären Tabelle erforderlich sind. Temporäre Tabellenressourcen werden mithilfe von JetSetSystemParameter mit JET_paramMaxTemporaryTables konfiguriert. |
JET_errCannotMaterializeForwardOnlySort |
Fehler bei JetOpenTemporaryTable , weil JET_bitTTForwardOnly angegeben wurde und die angegebene temporäre Tabelle nicht mithilfe der Forward-Only-Optimierung erstellt werden konnte. Windows Server 2003: Dieser Fehler wird nur von Windows Server 2003 und höheren Versionen zurückgegeben. |
JET_errTooManyColumns |
Es wurde versucht, der Tabelle zu viele Spalten hinzuzufügen. Eine Tabelle darf nicht mehr als JET_ccolFixedMost festen Spalten, nicht mehr als JET_ccolVarMost Spalten mit variabler Länge und nicht mehr als JET_ccolTaggedMost markierten Spalten enthalten. |
JET_errTooManyOpenTables |
Der Vorgang ist fehlgeschlagen, da das Modul die Ressourcen nicht zuordnen kann, die zum Zwischenspeichern des Schemas der Tabelle erforderlich sind. Verwenden Sie JetSetSystemParameter mit JET_paramMaxOpenTables, um die Anzahl von Tabellen zu konfigurieren, die über Schemas verfügen, die zwischengespeichert werden können. |
JET_errInvalidCodePage |
Das cp-Element der JET_COLUMNDEF-Struktur wurde nicht auf eine gültige Codepage festgelegt. Die einzigen gültigen Werte für Textspalten sind Englisch (1252) und Unicode (1200). Der Wert 0 bedeutet, dass der Standardwert verwendet wird (Englisch, 1252). |
JET_errInvalidColumnType |
Das Coltypelement des JET_COLUMNDEF wurde nicht auf einen gültigen Spaltentyp festgelegt. |
JET_errInvalidLanguageId |
Der Index konnte nicht erstellt werden, da versucht wurde, eine ungültige Gebietsschema-ID zu verwenden. Die Gebietsschema-ID ist möglicherweise vollständig ungültig oder das zugehörige Sprachpaket nicht installiert. |
JET_errInvalidLCMapStringFlags |
Der Index konnte nicht erstellt werden, da versucht wurde, einen ungültigen Satz von Normalisierungsflags zu verwenden. Windows XP: Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. Windows 2000: Unter Windows 2000 führen ungültige Normalisierungsflags zu JET_errIndexInvalidDef. |
JET_errIndexInvalidDef |
Der Index konnte nicht erstellt werden, da eine ungültige Indexdefinition angegeben wurde. JetOpenTemporaryTable gibt diesen Fehler unter den folgenden Bedingungen zurück:
Windows 2000: Dieser Fehler wird nur von Windows 2000 zurückgegeben. |
JET_errTooManyOpenIndexes |
Der Vorgang ist fehlgeschlagen, da das Modul die Ressourcen nicht zuordnen kann, die zum Zwischenspeichern der Indizes der Tabelle erforderlich sind. Verwenden Sie JetSetSystemParameter mit JET_paramMaxOpenTables, um die Anzahl der Indizes zu konfigurieren, die über Schemas verfügen, die zwischengespeichert werden können. |
Bei Erfolg wird ein für die neu erstellte temporäre Tabelle geöffneter Cursor zurückgegeben. Der Zustand der temporären Datenbank wird so vorbereitet, dass sie die neue temporäre Tabelle enthält. Der Zustand aller gewöhnlichen Datenbanken, die von der Datenbank-Engine verwendet werden, bleibt unverändert.
Bei einem Fehler wird die temporäre Tabelle nicht erstellt, und ein Cursor wird nicht zurückgegeben. Der Status der temporären Datenbank kann geändert werden. Der Zustand aller gewöhnlichen Datenbanken, die von der Datenbank-Engine verwendet werden, bleibt unverändert.
Bemerkungen
Temporäre Tabellen unterstützen nicht die vollständige Ergänzung der Spaltendefinitionsoptionen, die normalerweise von der Datenbank-Engine unterstützt werden. Tatsächlich werden nur JET_bitColumnFixed und JET_bitColumnTagged unterstützt. Dies bedeutet, dass es nicht möglich ist, eine automatische Inkrement-, Versions- oder mehrwertige Spalte in einer temporären Tabelle zu erstellen. Schließlich werden Escrow-Updatespalten nicht unterstützt, da sie jeweils nur von einer Sitzung verwendet werden können. Wenn eine dieser Optionen angefordert wird, werden sie ignoriert.
Temporäre Tabellen unterstützen keine Standardwerte. Wenn eine Spaltendefinition bereitgestellt wird, die eine Standardwertspezifikation enthält, wird diese Spezifikation ignoriert.
Temporäre Tabellen werden durch viele verschiedene ESE-Funktionen an den Aufrufer zurückgegeben. Beispielsweise gibt JetGetIndexInfo mit dem Optionssatz JET_IdxInfo eine temporäre Tabelle zurück, die eine Liste aller Schlüsselspalten in einem bestimmten Index enthält. Die temporären Tabellen folgen den gleichen Lebenszyklusregeln wie gewöhnliche temporäre Tabellen, wie hier beschrieben.
Temporäre Tabellen werden auch intern von der Datenbank-Engine für viele Aufgaben verwendet. Die wichtigste dieser Aufgaben ist das Erstellen eines Indexes über einer vorhandenen Tabelle. Eine temporäre Tabelle wird verwendet, um die Indexschlüssel zu sortieren, die zum Erstellen dieses Indexes verwendet werden.
Alle temporären Tabellen werden in der temporären Datenbank gespeichert. Die temporäre Datenbank ist eine spezielle Datenbankdatei, die während der Lebensdauer einer ESE-instance verwaltet und gelöscht wird, wenn diese instance heruntergefahren oder neu gestartet wird. Der Speicherort der temporären Datenbank kann mithilfe von JetSetSystemParameter mit JET_paramTempPath konfiguriert werden. Die Platzierung der temporären Datenbank auf dem Datenträger relativ zu Ihren Transaktionsprotokolldateien und Datenbankdateien kann wichtig sein, wenn Ihre Anwendung temporäre Tabellen stark nutzt oder häufig Indizes erstellt.
Der Lebenszyklus einer temporären Tabelle ist an die Cursor gebunden, die darauf verweisen. Wenn alle Cursor, die auf eine temporäre Tabelle verweisen, entweder implizit oder explizit geschlossen werden, wird die temporäre Tabelle gelöscht. Wenn eine temporäre Tabelle innerhalb einer Transaktion erstellt wird und diese Transaktion anschließend zurückgesetzt wird, wird die temporäre Tabelle gelöscht, da alle Cursor, auf die zu diesem Zeitpunkt verwiesen wurde, implizit geschlossen werden. Neue Cursor können nur mithilfe von JetDupCursor auf eine temporäre Tabelle verweisen. In diesem Fall werden die neuen Cursor auf dem ersten Indexeintrag der temporären Tabelle positioniert. JetDupCursor funktioniert nur in bestimmten Phasen der Verwendung für die temporäre Tabelle. Weitere Informationen finden Sie in den Anmerkungen zu temporären Tabellencursorfunktionen. Es ist nicht möglich, aus mehreren Sitzungen gleichzeitig auf eine temporäre Tabelle zu verweisen.
Vorsicht Es gibt ein wichtiges Problem in JetDupCursor , das sich auf temporäre Tabellen auswirkt. Wenn versucht wird, eine temporäre Tabelle zu duplizieren, die sich im Vorwärtsmodus befindet, wird der resultierende Cursor nicht ordnungsgemäß erstellt und funktioniert nicht. Es ist weiterhin sicher, einen Cursor über eine materialisierte temporäre Tabelle zu duplizieren.
Der temporäre Tabellen-Manager kann eine temporäre Tabelle auf drei Arten implementieren. Die erste Methode besteht darin, eine In-Memory-Tabelle zu verwalten. Diese Strategie ist die schnellste, kann aber nur für kleine, einfache, temporäre Tabellen verwendet werden. Die zweite Methode besteht darin, eine datenträgerbasierte Sortierung zu erstellen, die mithilfe eines forward-only-Iterators gesteuert werden kann. Diese Strategie kann nur unter bestimmten Umständen verwendet werden und ist die schnellste Möglichkeit, Duplikate aus einem sehr großen Dataset zu sortieren und zu entfernen. Die dritte Methode besteht darin, eine B+-Struktur in der temporären Datenbank zu erstellen, die die temporäre Tabelle enthält. Diese Strategie ist die langsamste, aber vielseitigste und wird als materialisierte temporäre Tabelle bezeichnet. Diese Strategien können in Kombination verwendet werden, um letztendlich die Funktionalität zu erreichen, die von der temporären Tabelle angefordert wird.
Wenn die temporäre Tabelle nicht materialisiert wird, wird sie hauptsächlich in zwei Hauptphasen verwendet. Die erste Phase ist die Einfügephase, in der die Tabelle mit ihrem anfänglichen Dataset aufgefüllt wird. In dieser Phase ist nur das Einfügen von Daten zulässig. Diese Phase endet, wenn versucht wird, den Cursor mithilfe von JetMove oder JetSeek zu bewegen. Die zweite Phase ist die Datenextraktionsphase. In dieser Phase können die daten, die in der temporären Tabelle gespeichert sind, entsprechend den Funktionen extrahiert werden, die beim Erstellen der temporären Tabelle angefordert wurden.
Funktionen für temporäre Tabellencursor
Wenn die temporäre Tabelle materialisiert wird, verfügt der Cursor über die folgenden Funktionen, kann jedoch durch die angeforderten Optionen weiter eingeschränkt werden:
Wenn die temporäre Tabelle nicht materialisiert wird und sich in der Einfügephase befindet, verfügt der Cursor über die folgenden Funktionen, kann jedoch durch die angeforderten Optionen weiter eingeschränkt werden:
-
Hinweis Bewirkt den Übergang zur Extraktionsphase.
-
Hinweis Bewirkt den Übergang zur Extraktionsphase.
Wenn die temporäre Tabelle nicht materialisiert ist und sich in der Extraktionsphase befindet, verfügt der Cursor über die folgenden Funktionen, kann jedoch durch die angeforderten Optionen weiter eingeschränkt werden:
-
Hinweis Wenn versucht wird, eine temporäre Tabelle zu duplizieren, die sich im Vorwärtsmodus befindet, wird der resultierende Cursor nicht ordnungsgemäß erstellt und funktioniert nicht. Es ist weiterhin sicher, einen Cursor über eine materialisierte temporäre Tabelle zu duplizieren.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista. |
Server |
Erfordert Windows Server 2008. |
Kopfzeile |
Deklariert in Esent.h. |
Bibliothek |
Verwenden Sie ESENT.lib. |
DLL |
Erfordert ESENT.dll. |
Weitere Informationen
JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
Informationsparameter
Parameter für temporäre Datenbanken