JetOpenTempTable-Funktion

Letzte Änderung: Freitag, 27. Februar 2015

Gilt für: Windows | Windows Server

JetOpenTempTable-Funktion

Die JetOpenTempTable -Funktion erstellt eine temporäre Tabelle mit einem einzelnen Index. Eine temporäre Tabelle speichert und ruft Datensätze wie eine gewöhnliche Tabelle mit JetCreateTableColumnIndexerstellt. Temporäre Tabellen sind jedoch viel schneller als die normale Tabellen durch ihre flüchtiger Natur. Sie können auch verwendet werden, sehr schnell sortieren und führen Sie zum Entfernen von Duplikaten auf Datensätze ausschließlich sequenziell zugegriffen.

JET_ERR JET_API JetOpenTempTable(
  __in          JET_SESID sesid,
  __in          const JET_COLUMNDEF* prgcolumndef,
  __in          unsigned long ccolumn,
  __in          JET_GRBIT grbit,
  __out         JET_TABLEID* ptableid,
  __out         JET_COLUMNID* prgcolumnid
);

Parameter

sesid

Die Sitzung für die Verwendung.

prgcolumndef

Die Spaltendefinitionen für die Spalten in der temporären Tabelle erstellt.

Wichtige Einschränkungen für die Definition Spaltenoptionen, die eine temporäre Tabelle verwendet werden. Finden Sie im Abschnitt Weitere Informationen.

Zusätzlich zu den üblichen Definition Spaltenoptionen kann 0 (null) oder mehr der folgenden Optionen auch angegeben werden, die nur im Kontext einer temporären Tabelle relevant sind.

Wert

Bedeutung

JET_bitColumnTTDescending

Die Sortierreihenfolge der Spalte für den Schlüssel für die temporäre Tabelle sollten absteigend aufsteigend, anstatt sein. Wenn diese Option ohne JET_bitColumnTTKey angegeben wird, wird diese Option ignoriert.

JET_bitColumnTTKey

Die Spalte wird eine Schlüsselspalte für die temporäre Tabelle sein.

Die Reihenfolge der die Spaltendefinitionen mit dieser Option im Eingabearray wird die Rangfolge der einzelnen Schlüsselspalte für die temporäre Tabelle bestimmt. Die erste Spaltendefinition im Array, das die Option festgelegt hat werden die wichtigsten Schlüsselspalte und so weiter. Wenn mehrere Schlüsselspalten angefordert werden, als die Datenbank-Engine unterstützt werden können wird diese Option für die Schlüsselspalten unterstützbaren ignoriert.

CColumn-Klasse

Finden Sie unter Prgcolumndef.

JET_errInvalidGrbit

Eine Gruppe von Bits 0 (null) oder mehrere der folgenden Optionen angeben.

Wert

Bedeutung

JET_bitTTErrorOnDuplicateInsertion

Jeder Versuch, einen Datensatz mit demselben Indexschlüssel einfügen, wie ein zuvor eingefügter Datensatz sofort mit JET_errKeyDuplicate fehl. Wenn diese Option nicht angefordert wird dann ein Duplikat wird sofort erkannt und schlägt fehl oder wird abhängig von der temporären Tabelle, basierend auf der angeforderten Funktionalität implementieren die Strategie vom Datenbankmodul im Hintergrund später entfernt.

Wenn diese Funktionalität nicht dann es erforderlich empfiehlt sich, diese nicht anfordern. Wenn diese Funktionalität nicht angefordert wird der temporäre Tabellenmanager möglicherweise eine Strategie für die Verwaltung der temporären Tabelle, die verbesserte Leistung führen können.

JET_bitTTForceMaterialization

Erzwingt, dass den temporäre Tabellenmanager, verlassen die Suche für die beste Strategie verwenden, verwalten die temporäre Tabelle, die zu höherer Leistung führen.

JET_bitTTForwardOnly

Die temporäre Tabelle wird nur erstellt, wenn der temporäre Tabelle-Manager kann die Implementierung, die optimiert ist für Zwischenergebnisse von Abfragen. Wenn kein Merkmal der temporären Tabelle die Verwendung dieser Optimierung verhindern wird der Vorgang mit JET_errCannotMaterializeForwardOnlySort fehl.

Ein Nebeneffekt dieser Option soll können die temporäre Tabelle Datensätze durch doppelte Indexschlüssel enthalten. Weitere Informationen finden Sie unter JET_bitTTUnique.

Diese Option ist nur auf Windows Server 2003 und späteren Versionen verfügbar.

JET_bitTTIndexed

Diese Option fordert, dass die temporäre Tabelle flexibel genug, um wurde zum Nachschlagen von Datensätzen durch Indexschlüssel zulässig sein.

Wenn diese Funktionalität nicht dann es erforderlich empfiehlt sich, diese nicht anfordern. Wenn diese Funktionalität nicht angefordert wird der temporäre Tabellenmanager möglicherweise eine Strategie für die Verwaltung der temporären Tabelle, die verbesserte Leistung führen können.

JET_bitTTUnique

Fordert an, dass die letzte Gruppe von Datensätzen in die temporäre Tabelle Datensätze durch doppelte Indexschlüssel entnommen werden.

Vor Windows Server 2003 verwendet das Datenbankmodul immer diese Option, um wirksam zu sein, dass alle Indizes gruppierten muss ein primärer Schlüssel und somit eindeutig sein. Ab Windows Server 2003 ist es möglich, eine temporäre Tabelle erstellen, die keine Duplikate entfernt werden, wenn die Option JET_bitTTForwardOnly ebenfalls angegeben ist.

Es ist nicht möglich, zu wissen, welche Duplikat erfolgreich ausgeführt werden kann und welche Duplikate verworfen werden, im Allgemeinen. Allerdings Aufforderung die Option "JET_bitTTErrorOnDuplicateInsertion" wird dann der erste Datensatz mit einem angegebenen Index-Schlüssel in die temporäre Tabelle eingefügt werden immer erfolgreich.

JET_bitTTUpdatable

Anforderungen, die die temporäre Tabelle flexibel genug, um die Datensätze zu ermöglichen, die zuvor eingefügt wurden, um später geändert werden. Wenn diese Funktionalität nicht dann es erforderlich empfiehlt sich, diese nicht anfordern.

Wenn diese Funktionalität nicht angefordert wird der temporäre Tabellenmanager möglicherweise eine Strategie für die Verwaltung der temporären Tabelle, die verbesserte Leistung führen können.

JET_bitTTScrollable

Anforderungen, die die temporäre Tabelle flexibel genug, um Datensätze zu scannenden in beliebiger Reihenfolge und-Richtung mithilfe von JetMovezu ermöglichen.

Wenn diese Funktion nicht erforderlich ist, dann es am besten ist, nicht anfordern. Wenn diese Funktionalität nicht angefordert wird der temporäre Tabellenmanager möglicherweise eine Strategie für die Verwaltung der temporären Tabelle, die verbesserte Leistung führen können.

JET_bitTTSortNullsHigh

Anforderungen, die NULL-Spaltenwerten näher an das Ende der Index als nicht-NULL-Spaltenwerten sortieren.

JET_bitTTIntrinsicLVsOnly

Anforderungen an nur intrinsische long-Werte zulassen.

Windows 7: JET_bitTTIntrinsicLVsOnly ist in Windows 7 eingeführt.

ptableid

Der Ausgabepuffer, der neuen Cursor in der neu erstellten temporären Tabelle geöffnet empfängt.

prgcolumnid

Der Ausgabepuffer, der das Array von Spalten-IDs generiert, die während der Erstellung der temporären Tabelle erhält.

Spalten-IDs in diesem Array wird das Eingabearray von Spaltendefinitionen genau entsprechen. Daher muss die Größe dieses Puffers auf die Größe des Eingabearrays entsprechen.

Return Value

Diese Funktion gibt den Datentyp der JET_ERR mit einem der folgenden Rückgabecodes. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine-Fehler und Fehler behandeln Parameter.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errCannotMaterializeForwardOnlySort

JetOpenTempTable ist fehlgeschlagen, da JET_bitTTForwardOnly angegeben wurde, und die temporäre Tabelle angegeben konnte nicht mithilfe der vorwärts-Optimierung erstellt werden. Dieser Fehler wird nur von Windows Server 2003 und späteren Versionen zurückgegeben werden.

JET_errClientRequestToStopJetService

Es ist nicht möglich, um den Vorgang abzuschließen, da alle Aktivitäten in der Instanz dieser Sitzung aufgrund eines Aufrufs von JetStopServiceeingestellt hat.

JET_errIndexInvalidDef

Der Index konnte nicht erstellt werden, da eine ungültige Indexdefinition angegeben wurde.

JetOpenTempTable gibt diesen Fehler zurück, wenn:

  • Das Gebietsschema Language Neutral angegeben ist.

  • Ein ungültiger Satz der Normalisierung Flags angegeben ist.

Dieser Fehler wird nur von Windows 2000 zurückgegeben werden.

JET_errInstanceUnavailable

Es ist nicht möglich, um den Vorgang abzuschließen, da die Sitzung zugeordnete Instanz ein schwerwiegender Fehler, der erfordert aufgetreten ist, dass der Zugriff auf alle Daten gesperrt werden, um die Integrität der Daten zu schützen. Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben werden.

JET_errInvalidCodePage

Cp-Bereich der JET_COLUMNDEF wurde nicht auf eine gültige Codepage festgelegt. Die einzigen gültigen Werte für Text-Spalten sind Englisch (1252) und Unicode (1200). Der Wert 0 bedeutet, dass der Standardwert (Deutsch, 1252) verwendet.

JET_errInvalidColumnType

Coltyp Bereich der JET_COLUMNDEF wurde nicht auf eine gültige Spaltentyp festgelegt.

JET_errInvalidLanguageId

Der Index konnte nicht erstellt werden, da versucht wurde, verwenden Sie eine ungültige Gebietsschema-ID. Die Gebietsschema-ID kann entweder vollständig ungültig sein, oder möglicherweise nicht das entsprechende Sprachpaket installiert.

JET_errInvalidLCMapStringFlags

Der Index konnte nicht erstellt werden, da versucht wurde, einen ungültigen Satz von Normalisierungsflags verwenden. Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben werden. Unter Windows 2000 werden ungültige Normalisierungsflags in JET_errIndexInvalidDef führen.

JET_errInvalidSesid

Das Sitzungshandle ist ungültig oder verweist auf eine geschlossene Sitzung.

Hinweis  Dieser Fehler wird nicht unter allen Umständen zurückgegeben. Ziehpunkte werden auf einer best Effort-Basis überprüft.

JET_errNotInitialized

Es ist nicht möglich, um den Vorgang abzuschließen, da die Instanz dieser Sitzung noch nicht initialisiert wurde.

JET_errOutOfCursors

Der Vorgang ist fehlgeschlagen, da das Modul keinen Ressourcen erforderlich, um einen neuen Cursor öffnen zuweisen kann. Cursor-Ressourcen werden mithilfe von JetSetSystemParameter mit JET_paramMaxCursorskonfiguriert.

JET_errOutOfMemory

Der Vorgang ist fehlgeschlagen, weil nicht genügend Speicher zugewiesen werden konnte, um sie durchzuführen.

JetOpenTempTable können JET_errOutOfMemory zurück, wenn der Adressbereich des Hostprozesses zu stark fragmentiert wird. Der temporäre Tabellenmanager wird immer ein Stück 1 MB Adressraum für jeden unabhängig von der Menge der zu speichernden Daten erstellte temporäre Tabelle zugewiesen.

JET_errRestoreInProgress

Es ist nicht möglich, um den Vorgang abzuschließen, da ein Wiederherstellungsvorgang ausgeführt auf die Instanz der Sitzung zugeordnet wird.

JET_errSessionSharingViolation

Die gleiche Sitzung kann für mehrere Threads gleichzeitig verwendet werden.

Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben werden.

JET_errTermInProgress

Es ist nicht möglich, um den Vorgang abzuschließen, da die Sitzung zugeordnete Instanz heruntergefahren wird.

JET_errTooManyColumns

Es wurde versucht, zu viele Spalten in der Tabelle hinzu. Eine Tabelle kann nicht mehr als JET_ccolFixedMost feste Spalten nicht mehr als Spalten mit variabler Länge JET_ccolVarMost und nicht mehr als JET_ccolTaggedMost Spalten markiert haben.

JET_errTooManyOpenIndexes

Der Vorgang ist fehlgeschlagen, da das Modul die Zwischenspeichern der Indizes der Tabelle erforderlichen Ressourcen zuordnen, kann nicht. Die Anzahl der Indizes, deren Schema zwischengespeichert werden kann, wird mithilfe von JetSetSystemParameter mit JET_paramMaxOpenTableskonfiguriert.

JET_errTooManyOpenTables

Der Vorgang ist fehlgeschlagen, da das Modul die Zwischenspeichern des Schemas der Tabelle erforderlichen Ressourcen zuordnen, kann nicht. Die Anzahl der Tabellen, deren Schema zwischengespeichert werden kann, wird mithilfe von JetSetSystemParameter mit JET_paramMaxOpenTableskonfiguriert.

JET_errTooManySorts

Der Vorgang ist fehlgeschlagen, da das Modul zum Erstellen einer temporären Tabelle erforderlichen Ressourcen zuweisen kann nicht. Temporäre Tabelle Ressourcen werden mithilfe von JetSetSystemParameter mit JET_paramMaxTemporaryTableskonfiguriert.

Bei Erfolg wird ein Cursor geöffnet, auf der neu erstellten temporären Tabelle zurückgegeben. Der Zustand der temporären Datenbank wird enthalten die neue temporäre Tabelle erstellt. Der Zustand der normalen Datenbanken von der Datenbank-Engine verwendet, bleiben unverändert.

Bei einem Fehler wird keine temporäre Tabelle erstellt werden und ein Cursor werden nicht zurückgegeben. Der Zustand der temporären Datenbank kann geändert werden. Der Zustand der normalen Datenbanken von der Datenbank-Engine verwendet, bleiben unverändert.

Anmerkungen

Temporäre Tabellen unterstützen keine umfassenden Definition Spaltenoptionen, die normalerweise durch die Datenbank-Engine unterstützt werden. In der Tat sind nur JET_bitColumnFixed und JET_bitColumnTagged unterstützt. Dies bedeutet, dass es nicht möglich, eine Auto-Inkrement, Version oder mehrwertige Spalte in eine temporäre Tabelle zu erstellen. Schließlich werden Aktualisierungsspalten Treuhandservice nicht unterstützt, weil sie nicht in eine temporäre Tabelle nützlich, da sie nur von einer Sitzung zu einem Zeitpunkt verwendet werden können. Alle diese Optionen ggf. werden sie ignoriert.

Temporäre Tabellen unterstützen keine Standardwerte. Wenn eine Spaltendefinition erfolgt, enthält eine Standardspezifikation Wert wird dieser Spezifikation ignoriert.

Temporäre Tabellen werden an den Aufrufer durch viele verschiedene Funktionen von ESE zurückgegeben. JetGetIndexInfo mit der Option JET_IdxInfo in der InfoLevel -Parameter gibt z. B. eine temporäre Tabelle mit einer Liste aller Schlüsselspalten im angegebenen Index zurück. Die temporären Tabellen folgen denselben Lebenszyklus Regeln als normale temporäre Tabellen, wie hier beschrieben.

Temporäre Tabellen werden vom Datenbankmodul für viele Aufgaben auch intern verwendet. Die wichtigste dieser Aufgaben ist die Erstellung eines Indexes in eine vorhandene Tabelle. Sortiert die Indexschlüssel verwendet, um diesen Index zu erstellen, wird eine temporäre Tabelle verwendet werden.

Alle temporäre Tabellen werden in der temporären Datenbank gespeichert. Die temporäre Datenbank ist eine spezielle Datenbank-Datei, die während der Lebensdauer einer ESE-Instanz verwaltet wird, und wird gelöscht, wenn diese Instanz heruntergefahren oder neu gestartet wird. Der Speicherort der temporären Datenbank kann mithilfe von JetSetSystemParameter mit JET_paramTempPathkonfiguriert werden. Platzierung der temporären Datenbank auf dem Datenträger im Vergleich zu der Transaktionsprotokolldateien und Datenbankdateien kann wichtig sein, wenn die Anwendung intensiv temporäre Tabellen nutzt oder Indizes häufig erstellt.

Lebenszyklus einer temporären Tabelle ist an den Cursor gebunden, die darauf verweisen. Wenn die Cursor, die 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 dieser Transaktion später dann die temporäre Tabelle zurückgesetzt wird werden gelöscht werden, da alle Cursor, auf den er zu diesem Zeitpunkt verwiesen werden implizit geschlossen werden. Neue Cursor können nur durch den Einsatz von JetDupCursoreine temporäre Tabelle verweisen. In diesem Fall werden der erste Indexeintrag der temporären Tabelle neue Cursor positioniert. JetDupCursor funktioniert nur während bestimmter Phasen der Verwendung für die temporäre Tabelle. Finden Sie die Erläuterungen zu temporären Tabelle Cursor Funktionen für Weitere Informationen. Es ist nicht möglich, mehr als eine Sitzung gleichzeitig eine temporäre Tabelle verweisen.

Es ist ein wichtiges Problem in JetDupCursor , die sich auf temporäre Tabellen auswirkt. Wenn versucht wird, eine temporäre Tabelle duplizieren, die im schreibgeschützten Modus wird der sich ergebende Cursor nicht ordnungsgemäß erstellt und funktioniert. Trotzdem gefahrlos einen Cursor über eine materialisierte temporäre Tabelle duplizieren.

Der temporäre Tabelle-Manager kann auch eine temporäre Tabelle auf drei Arten implementiert. Die erste Methode ist, eine Tabelle im Speicher beizubehalten. Diese Strategie ist die schnellste Methode, aber nur für kurze, einfache temporäre Tabellen verwendet werden. Die zweite Methode ist eine festplattenbasierte Sortierung erstellen, die einen Iterator vorwärts gerichteter gesteuert werden kann. Diese Strategie kann nur unter bestimmten Umständen verwendet werden und ist die schnellste Möglichkeit zum Sortieren und Entfernen von Duplikaten aus einer sehr großen Datenmenge. Die dritte Methode ist die Erstellung einer B +-Struktur in der temporären Datenbank zum Speichern der temporären Tabelle. Diese Strategie ist die langsamste, aber die flexibelste und eine materialisierte temporäre Tabelle genannt wird. Diese Strategien können in Kombination verwendet werden, um letztendlich den Funktionen der temporären Tabelle zu erreichen.

Wenn die temporäre Tabelle nicht materialisiert ist wird es im Wesentlichen zwei Hauptphasen verwendet. Die erste Phase ist die Phase einfügen, in dem die Tabelle mit der ursprünglichen Dataset gefüllt. In dieser Phase ist nur Dateneingabe zulässig. Diese Phase endet, wenn versucht wird, den Cursor mit JetMove oder wurdeverschoben. In der zweite Phase wird die Extraktion Data-Phase. In dieser Phase können die Daten in der temporären Tabelle nach Funktionen angefordert werden beim Erstellen die temporäre Tabelle extrahiert werden.

Temporäre Tabelle-Cursor-Funktionen

Wenn die temporäre Tabelle materialisiert ist, der Cursor verfügt über die folgenden Funktionen jedoch kann weiter eingeschränkt werden, durch die angeforderten Optionen:

Wenn die temporäre Tabelle nicht materialisiert wird und befindet sich in der Phase einfügen, der Cursor verfügt über die folgenden Funktionen jedoch möglicherweise durch die angeforderten Optionen weiter eingeschränkt werden:

Wenn die temporäre Tabelle nicht materialisiert wird und befindet sich in der Phase extrahieren, der Cursor verfügt über die folgenden Funktionen jedoch möglicherweise mit den angeforderten Optionen weiter eingeschränkt werden:

Voraussetzungen

-Client,

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

Erfordert WindowsServer 2008, WindowsServer 2003 oder Windows 2000 Server.

Kopfzeile

In Esent.h deklariert.

Library

Verwenden Sie ESENT.lib.

DLL

"ESENT.dll" erfordert.

Siehe auch

JET_COLUMNDEF
JET_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_UNICODEINDEX
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
temporäre Datenbank-Parameter