共用方式為


JetOpenTempTable2 函式

適用于: Windows |Windows Server

JetOpenTempTable2 函式

JetOpenTempTable2函式會建立具有單一索引的臨時表,可用來儲存和擷取記錄,就像使用JetCreateTableColumnIndex建立的一般資料表一樣。 此函式也有地區設定識別碼,可用來比較臨時表中的 Unicode 索引鍵資料行資料。 不過,臨時表比一般資料表快很多,因為其變動性。 當以純循序方式存取時,它們也可以用來非常快速地排序及執行記錄集的重複移除。

    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

要建立于臨時表中之資料行的資料行定義。

與臨時表搭配使用的資料行定義選項有重要的限制。 如需詳細資訊,請參閱<備註>一節。

除了一般的資料行定義選項之外,也可以指定下列零或多個選項,只與臨時表的內容相關。

意義

JET_bitColumnTTDescending

臨時表索引鍵資料行的排序次序應該遞減,而不是遞增。 如果未指定此選項,則不會JET_bitColumnTTKey則會忽略此選項。

JET_bitColumnTTKey

資料行將是臨時表的索引鍵資料行。

在輸入陣列中指定此選項的資料行定義順序,將決定臨時表每個索引鍵資料行的優先順序。 陣列中設定此選項的第一個資料行定義將是最重要的索引鍵資料行等等。 如果要求的索引鍵資料行數目超過資料庫引擎所能支援的數目,則會忽略不支援索引鍵資料行的這個選項。

ccolumn

請參閱 prgcolumndef

lcid

用來比較臨時表中任何 Unicode 索引鍵資料行資料的地區設定識別碼。

只要電腦上已安裝適當的語言套件,就可以使用任何地區設定。 其中一個例外狀況是語言中性地區設定 (LCID 為零) 不合法。

在 Windows Server 2003 和更新版本上,如果為此參數指定語言中性地區設定,則會改用預設地區設定識別碼 (美式英文) 。 這是允許零的值來表示預設值,而不是不合法的值。

當此參數不存在且 pidxunicode 參數不存在時,則會使用預設 LCID 來比較臨時表中的任何 Unicode 索引鍵資料行資料。 預設 LCID 是美式英文地區設定。

grbit

一組位,其中包含要用於此呼叫的選項,其中包含下列零個或多個選項。

意義

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

只允許內建 long 值的要求。

Windows 7:windows 7 引進 JET_bitTTIntrinsicLVsOnly

ptableid

將接收新建立之臨時表上開啟之新資料指標的輸出緩衝區。

prgcolumnid

輸出緩衝區,將接收在建立臨時表期間產生的資料行識別碼陣列。

此陣列中的資料行識別碼會完全符合資料行定義的輸入陣列。 因此,這個緩衝區的大小必須對應至輸入陣列的大小。

傳回值

此函式會傳回具有下列其中一個傳回碼 的 JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱 可延伸儲存引擎錯誤錯誤處理參數

傳回碼

Description

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

無法建立索引,因為嘗試使用不正確地區設定識別碼。 地區設定識別碼可能完全無效,或可能未安裝相關聯的語言套件。

JET_errInvalidLCMapStringFlags

無法建立索引,因為嘗試使用一組不正確正規化旗標。 此錯誤只會由 Windows XP 和更新版本傳回。 在 Windows 2000 上,不正確正規化旗標會導致JET_errIndexInvalidDef。

JET_errNotInitialized

無法完成作業,因為與會話相關聯的實例尚未初始化。

JET_errOutOfCursors

作業失敗,因為引擎無法配置開啟新資料指標所需的資源。 資料指標資源是使用 JetSetSystemParameter 搭配 JET_paramMaxCursors來設定。

JET_errOutOfMemory

作業失敗,因為無法配置足夠的記憶體來完成。

如果主機進程的位址空間太分散,JetOpenTempTable2可以傳回JET_errOutOfMemory。 不論要儲存的資料量為何,臨時表管理員一律會為每個建立的臨時表配置 1MB 的位址空間。

JET_errRestoreInProgress

無法完成作業,因為與會話相關聯的實例上正在進行還原作業。

JET_errSessionSharingViolation

同一個會話不能同時用於一個以上的執行緒。

此錯誤只會由 Windows XP 和更新版本傳回。

JET_errTermInProgress

無法完成作業,因為與會話相關聯的實例正在關閉。

JET_errTooManyColumns

嘗試將太多資料行加入資料表。 資料表不能超過JET_ccolFixedMost個固定資料行、不超過JET_ccolVarMost可變長度資料行,而且不能超過JET_ccolTaggedMost標記的資料行。

JET_errTooManyOpenIndexes

作業失敗,因為引擎無法配置快取資料表索引所需的資源。 可以使用 JetSetSystemParameter 搭配 JET_paramMaxOpenTables來設定其架構的索引數目。

JET_errTooManyOpenTables

作業失敗,因為引擎無法配置快取資料表架構所需的資源。 可以使用 JetSetSystemParameter 搭配 JET_paramMaxOpenTables來設定其架構的資料表數目。

JET_errTooManySorts

作業失敗,因為引擎無法配置建立臨時表所需的資源。 臨時表資源是使用 JetSetSystemParameter 搭配 JET_paramMaxTemporaryTables來設定。

成功時,將會傳回在新建立的臨時表上開啟的資料指標。 暫存資料庫的狀態將會準備好包含新的臨時表。 資料庫引擎使用中任何一般資料庫的狀態會保持不變。

失敗時,不會建立臨時表,而且不會傳回資料指標。 暫存資料庫的狀態可能會變更。 資料庫引擎使用中任何一般資料庫的狀態會保持不變。

備註

請參閱 JetOpenTempTable

規格需求

需求

用戶端

需要 Windows Vista、Windows XP 或 Windows 2000 Professional。

Server

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

標頭

在 Esent.h 中宣告。

程式庫

使用 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
系統參數