次の方法で共有


JetOpenTempTable2 関数

適用対象: Windows |Windows Server

JetOpenTempTable2 関数

JetOpenTempTable2 関数は、JetCreateTableColumnIndex を使用して作成された通常のテーブルと同様に、レコードの格納と取得に使用できる 1 つのインデックスを持つ一時テーブルを作成します。 この関数には、一時テーブル内の Unicode キー列データを比較するために使用できるロケール ID もあります。 ただし、一時テーブルは揮発性のため、通常のテーブルよりもはるかに高速です。 また、純粋にシーケンシャルな方法でアクセスした場合に、レコード セットに対して非常に迅速に並べ替え、重複除去を実行するためにも使用できます。

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

パラメーター

sesid

使用するセッション。

prgcolumndef

一時テーブルに作成する列の列定義。

一時テーブルで使用される列定義オプションには、重要な制限事項があります。 詳細については、次の「解説」を参照してください。

通常の列定義オプションに加えて、一時テーブルのコンテキストでのみ関連する次のオプションを 0 個以上指定することもできます。

説明

JET_bitColumnTTDescending

一時テーブルのキー列の並べ替え順序は、昇順ではなく降順にする必要があります。 このオプションが JET_bitColumnTTKey なしで指定されている場合、このオプションは無視されます。

JET_bitColumnTTKey

列は、一時テーブルのキー列になります。

入力配列でこのオプションを指定した列定義の順序によって、一時テーブルの各キー列の優先順位が決まります。 このオプションが設定された配列の最初の列定義は、最も重要なキー列になります。 データベース エンジンでサポートできるキー列よりも多くのキー列が要求される場合、サポートされていないキー列に対してこのオプションは無視されます。

ccolumn

「prgcolumndef」を参照してください。

lcid

一時テーブル内の Unicode キー列データを比較するために使用するロケール ID。

適切な言語パックがコンピューターにインストールされている限り、任意のロケールを使用できます。 1 つの例外は、Language Neutral ロケール (0 の LCID) が無効である点です。

Windows Server 2003 以降では、このパラメーターに言語ニュートラル ロケールが指定されている場合は、代わりに既定のロケール ID (米国英語) が使用されます。 これは、0 の値が無効な値ではなく既定値を示すことを許可するためです。

このパラメーターが存在せず、 pidxunicode パラメーターが存在しない場合は、一時テーブル内の Unicode キー列データを比較するために既定の LCID が使用されます。 既定の LCID は、米国英語ロケールです。

grbit

この呼び出しに使用するオプションを含むビットのグループ。これには、次の 0 個以上が含まれます。

説明

JET_bitTTErrorOnDuplicateInsertion

このオプションは、以前に挿入したレコードと同じインデックス キーを持つレコードを挿入しようとすると、JET_errKeyDuplicateですぐに失敗することを要求します。 このオプションが要求されていない場合は、要求された機能に基づいて一時テーブルを実装するためにデータベース エンジンによって選択された戦略に応じて、重複がすぐに検出され、失敗したり、後でサイレントに削除されたりする可能性があります。

この機能が不要な場合は、要求しないことをお勧めします。 この機能が要求されない場合、一時テーブル マネージャーは、パフォーマンスの向上につながる一時テーブルを管理するための戦略を選択できる場合があります。

JET_bitTTForceMaterialization

このオプションにより、一時テーブル マネージャーは、パフォーマンスが向上する一時テーブルを管理するための巧妙な戦略を選択しようとする試みを強制的に中止します。

JET_bitTTForwardOnly

このオプションは、一時テーブル マネージャーが中間クエリ結果用に最適化された実装を使用できる場合にのみ、一時テーブルを作成することを要求します。 一時テーブルの特性によってこの最適化の使用が妨げられる場合、操作はJET_errCannotMaterializeForwardOnlySortで失敗します。

このオプションの副作用は、一時テーブルに重複するインデックス キーを持つレコードを含めることができるようにすることです。 詳細については、「JET_bitTTUnique」を参照してください。

このオプションは、Windows Server 2003 以降のリリースでのみ使用できます。

JET_bitTTIndexed

このオプションでは、 JetSeek を使用してインデックス キーでレコードを検索できるように、一時テーブルに十分な柔軟性を要求します。

この機能が不要な場合は、要求しないことをお勧めします。 この機能が要求されない場合、一時テーブル マネージャーは、パフォーマンスの向上につながる一時テーブルを管理するための戦略を選択できる場合があります。

JET_bitTTScrollable

このオプションでは、 JetMove を使用してレコードを任意の順序と方向でスキャンできるように、一時テーブルに十分な柔軟性を要求します。

この機能が不要な場合は、要求しないことをお勧めします。 この機能が要求されない場合、一時テーブル マネージャーは、パフォーマンスの向上につながる一時テーブルを管理するための戦略を選択できる場合があります。

JET_bitTTSortNullsHigh

このオプションは、NULL 以外のキー列値よりもインデックスの末尾に近い位置に NULL キー列の値を並べ替えるよう要求します。

JET_bitTTUnique

このオプションは、重複するインデックス キーを持つレコードを、一時テーブル内のレコードの最後のセットから削除することを要求します。

Windows Server 2003 より前のバージョンでは、すべてのクラスター化インデックスも主キーである必要があり、したがって一意である必要があるため、データベース エンジンは常にこのオプションが有効であると想定しました。 Windows Server 2003 の時点で、JET_bitTTForwardOnly オプションも指定されている場合に重複を削除しない一時テーブルを作成できるようになりました。

どの重複が勝つか、どの重複が一般的に破棄されるかを知ることはできません。 ただし、JET_bitTTErrorOnDuplicateInsertion オプションが要求されると、一時テーブルに挿入する特定のインデックス キーを持つ最初のレコードが常に優先されます。

JET_bitTTUpdatable

このオプションは、以前に挿入されたレコードを後で変更できるように、一時テーブルに十分な柔軟性を持たせるように要求します。 この機能が不要な場合は、要求しないことをお勧めします。

この機能が要求されない場合、一時テーブル マネージャーは、パフォーマンスの向上につながる一時テーブルを管理するための戦略を選択できる場合があります。

JET_bitTTIntrinsicLVsOnly

組み込みの長い値のみを許可するように要求します。

Windows 7: JET_bitTTIntrinsicLVsOnly は Windows 7 で導入されています。

ptableid

新しく作成された一時テーブルで開かれた新しいカーソルを受け取る出力バッファー。

prgcolumnid

一時テーブルの作成時に生成された列 ID の配列を受け取る出力バッファー。

この配列内の列 ID は、列定義の入力配列に正確に対応します。 その結果、このバッファーのサイズは入力配列のサイズに対応している必要があります。

戻り値

この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラーエラー処理パラメーター」を参照してください。

リターン コード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errCannotMaterializeForwardOnlySort

jetOpenTempTable2 が失敗しました。JET_bitTTForwardOnlyが指定されており、指定した一時テーブルを前方専用最適化を使用して作成できなかったためです。 このエラーは、Windows Server 2003 以降のリリースでのみ返されます。

JET_errClientRequestToStopJetService

JetStopService の呼び出しの結果、セッションに関連付けられたインスタンスのすべてのアクティビティが停止したため、操作を完了できません。

JET_errInstanceUnavailable

セッションに関連付けられているインスタンスで、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。 このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errInvalidCodePage

JET_COLUMNDEFの cp フィールドが有効なコード ページに設定されていません。 テキスト列の有効な値は、英語 (1252) と Unicode (1200) のみです。 値 0 は、既定値 (英語、1252) が使用されることを意味します。

JET_errInvalidColumnType

JET_COLUMNDEFcoltyp フィールドが有効な列型に設定されていません。

JET_errIndexInvalidDef

無効なインデックス定義が指定されたため、インデックスを作成できませんでした。

JetOpenTempTable2 は、次の場合にこのエラーを返します。

  • 言語に依存しないロケールが指定されています。

  • 正規化フラグの無効なセットが指定されています。

このエラーは、Windows 2000 によってのみ返されます。

JET_errInvalidLanguageId

無効なロケール ID を使用しようとしたため、インデックスを作成できませんでした。 ロケール ID が完全に無効であるか、関連付けられている言語パックがインストールされていない可能性があります。

JET_errInvalidLCMapStringFlags

無効な正規化フラグのセットを使用しようとしたため、インデックスを作成できませんでした。 このエラーは、Windows XP 以降のリリースでのみ返されます。 Windows 2000 では、無効な正規化フラグが代わりにJET_errIndexInvalidDefされます。

JET_errNotInitialized

セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。

JET_errOutOfCursors

エンジンが新しいカーソルを開くために必要なリソースを割り当てることができないため、操作が失敗しました。 カーソル リソースは、JET_paramMaxCursorsJetSetSystemParameter を使用して構成されます。

JET_errOutOfMemory

完了するのに十分なメモリを割り当てられなかったため、操作は失敗しました。

ホスト プロセスのアドレス空間が断片化しすぎると、JetOpenTempTable2 はJET_errOutOfMemoryを返すことができます。 一時テーブル マネージャーは、格納するデータの量に関係なく、作成されるすべての一時テーブルに対して常に 1 MB のアドレス空間チャンクを割り当てます。

JET_errRestoreInProgress

セッションに関連付けられているインスタンスで復元操作が進行中のため、操作を完了できません。

JET_errSessionSharingViolation

同じセッションを複数のスレッドに同時に使用することはできません。

このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errTermInProgress

セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。

JET_errTooManyColumns

テーブルに列を追加しようとしました。 テーブルには、固定列JET_ccolFixedMost以下、可変長列JET_ccolVarMost以下、およびタグ付き列JET_ccolTaggedMost以下を含めることができます。

JET_errTooManyOpenIndexes

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

JET_errTooManyOpenTables

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

JET_errTooManySorts

エンジンが一時テーブルの作成に必要なリソースを割り当てることができないため、操作に失敗しました。 一時テーブル リソースは、JET_paramMaxTemporaryTablesJetSetSystemParameter を使用して構成されます。

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

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

解説

「JetOpenTempTable」を参照してください

必要条件

要件

Client

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

[サーバー]

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

Header

Esent.h で宣言されています。

Library

ESENT.lib を使用します。

[DLL]

ESENT.dllが必要です。

参照

JET_COLUMNDEF
JET_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_UNICODEINDEX
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
システム パラメーター