JetOpenTemporaryTable 関数
適用対象: Windows |Windows Server
JetOpenTemporaryTable 関数
JetOpenTemporaryTable 関数は、JetCreateTableColumnIndex を使用して作成される通常のテーブルと同様に、レコードの格納と取得に使用できる単一のインデックスを持つ揮発性テーブルを作成します。
Windows Vista:JetOpenTemporaryTable が Windows Vista で導入されました。
一時テーブルは揮発性のため、通常のテーブルよりも高速です。 レコード セットに対して純粋に連続した方法でアクセスすると、レコード セットの並べ替えと重複除去をすばやく実行できます。
JET_ERR JET_API JetOpenTemporaryTable(
__in JET_SESID sesid,
__in JET_OPENTEMPORARYTABLE* popentemporarytable
);
パラメーター
sesid
この呼び出しに使用されるセッション。
popentemporarytable
入力時に作成する一時テーブルの説明を含む JET_OPENTEMPORARYTABLE構造体への ポインター。 呼び出しが成功すると、構造体には一時テーブルと列の識別へのハンドルが含まれます。
戻り値
この関数は、次のいずれかのリターン コードを使用して 、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張可能ストレージ エンジン エラー 」および「 エラー処理パラメーター」を参照してください。
リターン コード |
説明 |
---|---|
JET_errSuccess |
操作は正常に完了しました。 |
JET_errOutOfMemory |
完了するのに十分なメモリを割り当てられなかったため、操作が失敗しました。 JetOpenTemporaryTable は、ホスト プロセスのアドレス空間が断片化しすぎると、JET_errOutOfMemoryを返すことができます。 一時テーブル・マネージャーは、保管されるデータの量に関係なく、作成されたすべての一時表に 1 MB のアドレス・スペース・チャンクを割り振ります。 |
JET_errInvalidParameter |
指定されたパラメーターの 1 つに予期しない値が含まれていたか、複数のパラメーター値の組み合わせによって予期しない結果が発生しました。 このエラーは、 JetOpenTemporaryTable によって次の条件で返されます。
|
JET_errNotInitialized |
セッションに関連付けられたインスタンスがまだ初期化されていないため、操作を完了できません。 |
JET_errClientRequestToStopJetService |
JetStopService の呼び出しの結果、セッションに関連付けられているインスタンス上のすべてのアクティビティが停止したため、操作を完了できません。 |
JET_errInstanceUnavailable |
セッションに関連付けられているインスタンスで、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errTermInProgress |
セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。 |
JET_errRestoreInProgress |
セッションに関連付けられているインスタンスで復元操作が進行中のため、操作を完了できません。 |
JET_errSessionSharingViolation |
同じセッションを複数のスレッドに同時に使用することはできません。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errInvalidSesid |
セッション ハンドルが無効であるか、閉じられたセッションを参照しています。 メモ このエラーは、すべての状況で返されるわけではありません。 ハンドルはベスト エフォートベースでのみ検証されます。 |
JET_errOutOfCursors |
エンジンが新しいカーソルを開くために必要なリソースを割り当てることができないため、操作が失敗しました。 カーソル リソースは、JET_paramMaxCursorsで JetSetSystemParameter を使用して構成されます。 |
JET_errTooManySorts |
エンジンが一時テーブルの作成に必要なリソースを割り当てることができないため、操作が失敗しました。 一時テーブル リソースは、 JetSetSystemParameter と JET_paramMaxTemporaryTablesを使用して構成されます。 |
JET_errCannotMaterializeForwardOnlySort |
jetOpenTemporaryTable は、JET_bitTTForwardOnlyが指定されており、指定された一時テーブルを前方専用最適化を使用して作成できなかったため、失敗しました。 Windows Server 2003: このエラーは、Windows Server 2003 以降のリリースでのみ返されます。 |
JET_errTooManyColumns |
テーブルに列を追加しようとしました。 テーブルには、固定列JET_ccolFixedMost以下、可変長列JET_ccolVarMost、およびタグ付き列JET_ccolTaggedMost以下を含めることができます。 |
JET_errTooManyOpenTables |
エンジンがテーブルのスキーマをキャッシュするために必要なリソースを割り当てることができないため、操作が失敗しました。 キャッシュできるスキーマを持つテーブルの数を構成するには、 JetSetSystemParameter と 共に JET_paramMaxOpenTablesを使用します。 |
JET_errInvalidCodePage |
JET_COLUMNDEF構造体の cp メンバーが有効なコード ページに設定されていません。 テキスト列の有効な値は、英語 (1252) と Unicode (1200) のみです。 値 0 は、既定値が使用されることを意味します (英語、1252)。 |
JET_errInvalidColumnType |
JET_COLUMNDEFの coltyp メンバーが有効な列型に設定されていませんでした。 |
JET_errInvalidLanguageId |
無効なロケール ID を使用しようとしたため、インデックスを作成できませんでした。 ロケール ID が完全に無効であるか、関連付けられている言語パックがインストールされていない可能性があります。 |
JET_errInvalidLCMapStringFlags |
無効な正規化フラグのセットを使用しようとしたため、インデックスを作成できませんでした。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 Windows 2000: Windows 2000 では、無効な正規化フラグがJET_errIndexInvalidDefされます。 |
JET_errIndexInvalidDef |
無効なインデックス定義が指定されたため、インデックスを作成できませんでした。 JetOpenTemporaryTable は、次の条件でこのエラーを返します。
Windows 2000: このエラーは Windows 2000 によってのみ返されます。 |
JET_errTooManyOpenIndexes |
エンジンがテーブルのインデックスをキャッシュするために必要なリソースを割り当てることができないため、操作が失敗しました。 キャッシュできるスキーマを持つインデックスの数を構成するには、 JetSetSystemParameter と JET_paramMaxOpenTablesを使用します。 |
成功すると、新しく作成された一時テーブルで開かれたカーソルが返されます。 一時データベースの状態は、新しい一時テーブルを格納するように準備されます。 データベース エンジンによって使用されている通常のデータベースの状態は変更されません。
失敗した場合、一時テーブルは作成されず、カーソルは返されません。 一時データベースの状態は変更できます。 データベース エンジンによって使用されている通常のデータベースの状態は変更されません。
注釈
一時テーブルでは、通常データベース エンジンでサポートされている列定義オプションの完全な補完はサポートされていません。 実際には、JET_bitColumnFixedとJET_bitColumnTaggedのみがサポートされています。 つまり、一時テーブルに自動インクリメント、バージョン、または複数値の列を作成することはできません。 最後に、エスクロー更新列は一度に 1 つのセッションでのみ使用できるため、サポートされていません。 これらのオプションのいずれかが要求された場合、それらは無視されます。
一時テーブルでは既定値はサポートされていません。 既定値の指定を含む列定義が指定されている場合、その指定は無視されます。
一時テーブルは、さまざまな ESE 関数の結果として呼び出し元に返されます。 たとえば、JET_IdxInfo オプション セットを指定した JetGetIndexInfo は、特定のインデックス内のすべてのキー列のリストを含む一時テーブルを返します。 一時テーブルは、ここで説明する通常の一時テーブルと同じライフサイクル ルールに従います。
一時テーブルは、多くのタスクに対してデータベース エンジンによって内部的に使用されます。 これらのタスクの中で最も重要なのは、既存のテーブルに対するインデックスの作成です。 一時テーブルは、そのインデックスの構築に使用されるインデックス キーの並べ替えに使用されます。
すべての一時テーブルは一時データベースに格納されます。 一時データベースは、ESE インスタンスの有効期間中に保持され、そのインスタンスがシャットダウンまたは再起動されると削除される特殊なデータベース ファイルです。 一時データベースの場所は、 JetSetSystemParameter と JET_paramTempPathを使用して構成できます。 アプリケーションで一時テーブルを頻繁に使用したり、インデックスを頻繁に作成したりする場合は、トランザクション ログ ファイルとデータベース ファイルに対する一時データベースのディスクへの配置が重要な場合があります。
一時テーブルのライフサイクルは、一時テーブルを参照するカーソルに関連付けられます。 一時テーブルを参照するすべてのカーソルが暗黙的または明示的に閉じられている場合、一時テーブルは削除されます。 一時テーブルがトランザクション内に作成され、その後そのトランザクションがロールバックされた場合、この時点で一時テーブルを参照していたカーソルは暗黙的に閉じられるため、一時テーブルは削除されます。 新しいカーソルは、 JetDupCursor を使用する場合にのみ一時テーブルを参照できます。 この場合、新しいカーソルは一時テーブルの最初のインデックス エントリに配置されます。 JetDupCursor は、一時テーブルの特定の使用フェーズでのみ機能します。 詳細については、一時テーブル・カーソル機能に関する解説を参照してください。 一度に複数のセッションから一時テーブルを参照することはできません。
注意JetDupCursor には、一時テーブルに影響する重要な問題があります。 前方専用モードの一時テーブルを複製しようとすると、結果のカーソルは正しく作成されず、誤動作します。 具体化された一時テーブルの上にカーソルを複製しても安全です。
一時テーブル マネージャーは、3 つの方法で一時テーブルを実装できます。 1 つ目の方法は、メモリ内テーブルを維持することです。 この方法は最も高速ですが、小規模でシンプルな一時テーブルにのみ使用できます。 2 つ目の方法は、前方スクロール反復子を使用して駆動できるディスク ベースの並べ替えを作成することです。 この方法は特定の状況でのみ使用でき、非常に大きなデータ セットの重複を並べ替えて削除する最も速い方法です。 3 番目の方法は、一時テーブルを保持する B+ ツリーを一時データベースに作成することです。 この戦略は最も遅いですが、最も汎用性が高く、具体化された一時テーブルと呼ばれます。 これらの戦略を組み合わせて使用すると、最終的に一時テーブルに要求される機能を実現できます。
一時テーブルが具体化されていない場合は、主に 2 つの主要なフェーズで使用されます。 最初のフェーズは、テーブルに初期データ セットが設定される挿入フェーズです。 このフェーズでは、データの挿入のみが許可されます。 このフェーズは、 JetMove または JetSeek を使用してカーソルを移動しようとすると終了します。 2 番目のフェーズは、データ抽出フェーズです。 このフェーズでは、一時テーブルに格納されているデータは、一時テーブルの作成時に要求された機能に従って抽出できます。
一時テーブル カーソル機能
一時テーブルが具体化されると、カーソルには次の機能がありますが、要求されるオプションによってさらに制限される可能性があります。
一時テーブルが具体化されておらず、挿入フェーズにある場合、カーソルには次の機能がありますが、要求されるオプションによってさらに制限される可能性があります。
-
メモ 抽出フェーズに遷移します。
-
メモ 抽出フェーズに遷移します。
一時テーブルが具体化されておらず、抽出フェーズにある場合、カーソルには次の機能がありますが、要求されるオプションによってさらに制限される場合があります。
-
メモ 前方専用モードの一時テーブルを複製しようとすると、結果のカーソルは正しく作成されず、誤動作します。 具体化された一時テーブルの上にカーソルを複製しても安全です。
要件
要件 | 値 |
---|---|
Client |
Windows Vista が必要です。 |
[サーバー] |
Windows Server 2008 が必要です。 |
Header |
Esent.h で宣言されています。 |
Library |
ESENT.lib を使用します。 |
[DLL] |
ESENT.dllが必要です。 |
参照
JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
情報パラメーター
一時データベース パラメーター