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 錯誤的詳細資訊,請參閱 可延伸的儲存引擎錯誤 和 錯誤處理參數。
傳回碼 |
Description |
---|---|
JET_errSuccess |
作業已成功完成。 |
JET_errOutOfMemory |
作業失敗,因為無法配置足夠的記憶體來完成作業。 如果主機進程的位址空間太分散,JetOpenTemporaryTable可以傳回JET_errOutOfMemory。 臨時表管理員會為每個建立的臨時表配置 1 MB 的位址空間區塊,而不論儲存的資料量為何。 |
JET_errInvalidParameter |
其中一個提供的參數包含非預期的值,或數個參數值的組合會導致非預期的結果。 JetOpenTemporaryTable在下列情況下會傳回此錯誤:
|
JET_errNotInitialized |
作業無法完成,因為尚未初始化與會話相關聯的實例。 |
JET_errClientRequestToStopJetService |
作業無法完成,因為與會話相關聯的實例上的所有活動都因為對 JetStopService的呼叫而停止。 |
JET_errInstanceUnavailable |
作業無法完成,因為與會話相關聯的實例發生嚴重錯誤,需要撤銷所有資料的存取權,以保護該資料的完整性。 Windowsxp: 此錯誤只會由 Windows XP 和更新版本傳回。 |
JET_errTermInProgress |
作業無法完成,因為與會話相關聯的實例正在關閉。 |
JET_errRestoreInProgress |
作業無法完成,因為與會話相關聯的實例上正在進行還原作業。 |
JET_errSessionSharingViolation |
同一個會話不能同時用於多個執行緒。 Windowsxp: 此錯誤只會由 Windows XP 和更新版本傳回。 |
JET_errInvalidSesid |
會話控制碼無效,或參考已關閉的會話。 注意 在所有情況下都不會傳回此錯誤。 控制碼只會以最佳方式進行驗證。 |
JET_errOutOfCursors |
作業失敗,因為引擎無法配置開啟新資料指標所需的資源。 資料指標資源是使用 JetSetSystemParameter 搭配 JET_paramMaxCursors來設定。 |
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 |
無法建立索引,因為嘗試使用不正確地區設定識別碼。 地區設定識別碼可能完全無效,或未安裝相關聯的語言套件。 |
JET_errInvalidLCMapStringFlags |
無法建立索引,因為嘗試使用一組不正確正規化旗標。 Windowsxp: 此錯誤只會由 Windows XP 和更新版本傳回。 Windows 2000: 在 Windows 2000 上,不正確正規化旗標會導致JET_errIndexInvalidDef。 |
JET_errIndexInvalidDef |
無法建立索引,因為指定了不正確索引定義。 JetOpenTemporaryTable 會在下列情況下傳回此錯誤:
Windows 2000: 此錯誤只會由 Windows 2000 傳回。 |
JET_errTooManyOpenIndexes |
作業失敗,因為引擎無法配置快取資料表索引所需的資源。 若要設定具有可快取架構的索引數目,請使用 JetSetSystemParameter 搭配 JET_paramMaxOpenTables。 |
成功時,將會傳回在新建立的臨時表上開啟的資料指標。 暫存資料庫的狀態將會準備好包含新的臨時表。 資料庫引擎使用中任何一般資料庫的狀態將會保持不變。
失敗時,將不會建立臨時表,而且不會傳回資料指標。 暫存資料庫的狀態可以變更。 資料庫引擎使用中任何一般資料庫的狀態將會保持不變。
備註
臨時表不支援資料庫引擎通常支援的資料行定義選項完整補充。 事實上,僅支援JET_bitColumnFixed和JET_bitColumnTagged。 這表示無法在臨時表中建立自動遞增、版本或多重值資料行。 最後,不支援委付更新資料行,因為它們一次只能由一個會話使用。 如果要求其中任何一個選項,則會忽略這些選項。
臨時表不支援預設值。 如果提供包含預設值規格的資料行定義,則會忽略該規格。
臨時表會因為許多不同的 ESE 函式而傳回給呼叫端。 例如,具有JET_IdxInfo選項組的 JetGetIndexInfo 會傳回臨時表,其中包含指定索引中所有索引鍵資料行的清單。 臨時表遵循與一般臨時表相同的生命週期規則,如這裡所述。
資料庫引擎也會在內部使用臨時表來執行許多工作。 這些工作最重要的是建立現有資料表上的索引。 臨時表將用來排序用來建構該索引的索引鍵。
所有臨時表都會儲存在臨時資料庫中。 暫存資料庫是特殊資料庫檔案,會在 ESE 實例的存留期間維護,並在該實例關閉或重新開機時刪除。 您可以使用 JetSetSystemParameter 搭配 JET_paramTempPath來設定暫存資料庫的位置。 如果您的應用程式大量使用臨時表或經常建立索引,則暫存資料庫在磁片上相對於交易記錄檔和資料庫檔案的位置可能很重要。
臨時表的生命週期會系結至參考它的資料指標。 如果參考臨時表的所有資料指標都已關閉,則隱含或明確關閉臨時表,則會刪除臨時表。 如果在交易內建立臨時表,且後續復原該交易,則會刪除臨時表,因為目前參考它的任何資料指標都會隱含關閉。 新的資料指標只能透過 JetDupCursor的使用來參考臨時表。 在此情況下,新的資料指標會放在臨時表的第一個索引項目目上。 JetDupCursor 只能在臨時表的特定使用階段運作。 如需詳細資訊,請參閱臨時表資料指標功能的備註。 一次無法從多個會話參考臨時表。
謹慎JetDupCursor中會影響臨時表的重要問題。 如果嘗試複製處於順向模式的臨時表,則產生的資料指標將不會正確建立,而且將會失敗。 在具體化臨時表上複製游標仍然安全。
臨時表管理員可以透過三種方式實作臨時表。 第一種方法是維護記憶體內部資料表。 此策略是最快的策略,但只能用於小型、簡單、臨時表。 第二種方法是建立磁片型排序,可使用順向反覆運算器來驅動。 此策略只能在特定情況下使用,而且是從非常大型資料集排序和移除重複專案的最快速方式。 第三種方法是在暫存資料庫中建立 B+ 樹狀結構,以保存臨時表。 此策略最慢,但用途最廣泛,且稱為具體化臨時表。 這些策略可以搭配使用,最終達到臨時表所要求的功能。
當臨時表未具體化時,主要會在兩個主要階段使用。 第一個階段是插入階段,其中資料表會填入其初始資料集。 在這個階段中,只允許插入資料。 此階段會在嘗試使用 JetMove 或 JetSeek移動游標時結束。 第二個階段是資料擷取階段。 在這個階段中,根據建立臨時表時所要求的功能,可以擷取儲存在臨時表中的資料。
臨時表資料指標功能
具體化臨時表時,游標具有下列功能,但可能會受到要求的選項進一步限制:
當臨時表未具體化且處於插入階段時,游標具有下列功能,但可能會受到要求的選項進一步限制:
-
注意 導致轉換至擷取階段。
-
注意 導致轉換至擷取階段。
當臨時表未具體化且處於擷取階段時,游標具有下列功能,但可能會受到要求的選項進一步限制:
-
注意 如果嘗試複製處於順向模式的臨時表,則產生的資料指標將不會正確建立,而且將會失敗。 在具體化臨時表上複製游標仍然安全。
規格需求
需求 | 值 |
---|---|
用戶端 |
需要 Windows Vista。 |
Server |
需要 Windows Server 2008。 |
標頭 |
在 Esent.h 中宣告。 |
程式庫 |
使用 ESENT.lib。 |
Dll |
需要ESENT.dll。 |
另請參閱
JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
參考參數
暫存資料庫參數