次の方法で共有


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_OPENTEMPORARYTABLE構造体の cbStruct メンバーは、そのバージョンのデータベース エンジンでサポートされているこの構造体のバージョンに対応していません

  • JET_OPENTEMPORARYTABLE構造体の cbKeyMost メンバーがJET_cbKeyMostMin未満です。

  • JET_OPENTEMPORARYTABLE構造体の cbKeyMost メンバーは、インスタンス (JET_paramDatabasePageSize) のデータベース ページ サイズでサポートされている最大値を超えています。 詳細については、「情報パラメーター」の一覧の「JET_paramKeyMost パラメーター」 を参照してください。

  • JET_OPENTEMPORARYTABLE構造体の cbVarSegMac メンバーが cbKeyMost メンバーより大きい。

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_paramMaxCursorsJetSetSystemParameter を使用して構成されます。

JET_errTooManySorts

エンジンが一時テーブルの作成に必要なリソースを割り当てることができないため、操作が失敗しました。 一時テーブル リソースは、 JetSetSystemParameterJET_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_COLUMNDEFcoltyp メンバーが有効な列型に設定されていませんでした。

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

エンジンがテーブルのインデックスをキャッシュするために必要なリソースを割り当てることができないため、操作が失敗しました。 キャッシュできるスキーマを持つインデックスの数を構成するには、 JetSetSystemParameterJET_paramMaxOpenTablesを使用します。

成功すると、新しく作成された一時テーブルで開かれたカーソルが返されます。 一時データベースの状態は、新しい一時テーブルを格納するように準備されます。 データベース エンジンによって使用されている通常のデータベースの状態は変更されません。

失敗した場合、一時テーブルは作成されず、カーソルは返されません。 一時データベースの状態は変更できます。 データベース エンジンによって使用されている通常のデータベースの状態は変更されません。

注釈

一時テーブルでは、通常データベース エンジンでサポートされている列定義オプションの完全な補完はサポートされていません。 実際には、JET_bitColumnFixedとJET_bitColumnTaggedのみがサポートされています。 つまり、一時テーブルに自動インクリメント、バージョン、または複数値の列を作成することはできません。 最後に、エスクロー更新列は一度に 1 つのセッションでのみ使用できるため、サポートされていません。 これらのオプションのいずれかが要求された場合、それらは無視されます。

一時テーブルでは既定値はサポートされていません。 既定値の指定を含む列定義が指定されている場合、その指定は無視されます。

一時テーブルは、さまざまな ESE 関数の結果として呼び出し元に返されます。 たとえば、JET_IdxInfo オプション セットを指定した JetGetIndexInfo は、特定のインデックス内のすべてのキー列のリストを含む一時テーブルを返します。 一時テーブルは、ここで説明する通常の一時テーブルと同じライフサイクル ルールに従います。

一時テーブルは、多くのタスクに対してデータベース エンジンによって内部的に使用されます。 これらのタスクの中で最も重要なのは、既存のテーブルに対するインデックスの作成です。 一時テーブルは、そのインデックスの構築に使用されるインデックス キーの並べ替えに使用されます。

すべての一時テーブルは一時データベースに格納されます。 一時データベースは、ESE インスタンスの有効期間中に保持され、そのインスタンスがシャットダウンまたは再起動されると削除される特殊なデータベース ファイルです。 一時データベースの場所は、 JetSetSystemParameterJET_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
情報パラメーター
一時データベース パラメーター