共用方式為


JetCreateTable 函式

適用于: Windows |Windows Server

JetCreateTable 函式

JetCreateTable函式會在 ESE 資料庫中建立空的資料表。

    JET_ERR JET_API JetCreateTable(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in          const tchar* szTableName,
      __in          unsigned long lPages,
      __in          unsigned long lDensity,
      __out         JET_TABLEID* ptableid
    );

參數

sesid

要使用的資料庫會話內容。

dbid

要使用的資料庫識別碼。

szTableName

要建立的索引名稱。

名稱必須根據下列規則進行格式化:

  • 小於JET_cbNameMost,不包括終止的 Null。

  • 由下列一組字元組成:0 到 9、A 到 Z、a 到 z、 和 「!」 (驚嘆號) 、「,」 (逗號) 、「[」 (左括弧) 和 「]」 (右括弧) 以外的所有其他標點符號,也就是 ASCII 字元0x20、0x22到0x2d、0x5a 0x2f 0x5c 0x5d到0x7f。

  • 不要以空格開頭。

  • 至少由一個非空白字元所組成。

lPages

要配置給資料表的資料庫頁面初始數目。 如果在此資料表中插入許多資料列,則指定大於一的數位可能會減少片段。

lDensity

資料表密度,以百分比點為單位。 數位必須是 0 或介於 20 到 100 的範圍內。 傳遞 0 表示應該使用預設值。 預設值為 80。

ptableid

成功時,此欄位中會傳回資料表識別碼。 如果 API 未傳回JET_errSuccess,則此值為未定義。

傳回值

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

傳回碼

Description

JET_errSuccess

作業已成功完成。

JET_errCallbackNotResolved

無法解析回呼函式。 找不到 DLL,或找不到 DLL 中的函式。 啟用足夠的記錄後,事件記錄檔會提供更多詳細資料。

JET_errCannotIndex

嘗試對 escrow-update 或 SLV 資料行編制索引 (請注意,SLV 資料行已被取代) 。

JET_errCannotNestDDL

如果 ptablecreate-grbit > 指定JET_bitTableCreateTemplateTable,但 ptablecreate-szTemplateTableName > 設定為 Null。

JET_errColumnDuplicate

資料行已經存在。

JET_errColumnNotFound

嘗試對不存在的資料行編制索引。 嘗試有條件地對不存在的資料行編制索引,也會產生此錯誤。

JET_errColumnRedundant

嘗試新增備援資料行。 每個資料表不應該有一個以上的自動建立資料行,而且每個資料表不能有一個以上的版本資料行。

JET_errDensityInvalid

JET_TABLECREATEJET_TABLECREATE2結構中的ulDensity成員中傳遞了不正確密度。

JET_errDDLNotInheritable

表示JET_TABLECREATE結構szTemplateTableName成員中名為 的資料表不是標示為樣板資料表 (也就是說,該資料表沒有JET_bitTableCreateTemplateTable設定) 。

JET_errIndexDuplicate

嘗試定義兩個相同的索引。

JET_errIndexHasPrimary

嘗試指定一個以上的資料表主要索引。 資料表必須只有一個主要索引。 如果未指定主要索引,資料庫引擎會以透明方式建立一個。

JET_errIndexInvalidDef

指定了不正確索引定義。 收到此錯誤的一些可能原因如下:

  • 主要索引是條件式 (,也就是JET_INDEXCREATE結構的grbit成員已設定JET_bitIndexPrimary,而JET_INDEXCREATE結構的cConditionalColumn成員大於零) 。

  • Windows Server 2003 和更新版本。 嘗試使用 Tuple 限制建立 Tuple 索引,但未在JET_INDEXCREATE結構中傳遞ptuplelimits成員,也就是JET_INDEXCREATE (結構的grbit成員已設定JET_bitIndexTupleLimits,但ptuplelimits指標為 Null) 。

  • 傳入JET_INDEXCREATE結構的szKey成員中不正確金鑰定義。 如需有效定義的討論,請參閱 JET_INDEXCREATE

  • JET_INDEXCREATE中的cbVarSegMac成員設定為大於主要索引) 或大於次要索引JET_cbSecondaryKeyMost () 的 JET_cbPrimaryKeyMost (。

  • 針對使用者定義的 Unicode 索引傳遞不正確組合, (在 JET_INDEXCREATE) 的 grbit 成員中設定 JET_bitIndexUnicode 位。 某些常見原因包括JET_INDEXCREATE結構的pidxunicode成員為 Null,或pidxunicode結構中指定的 LCID 無效。

  • 指定主要索引的多值資料行。

  • 嘗試編制太多條件式資料行的索引。 JET_INDEXCREATE結構的cConditionalColumn成員不能大於JET_ccolKeyMost。

JET_errIndexTuplesInvalidLimits

Windows XP 和更新版本。 已指定 JET_TUPLELIMITS 結構,且不支援其限制。 請參閱 JET_TUPLELIMITS 結構的備註一節。

JET_errIndexTuplesNonUniqueOnly

Windows XP 和更新版本。 元組索引不可以是唯一的 (,也就是說,JET_INDEXCREATE結構的grbit成員不能同時設定JET_bitIndexPrimary和JET_bitIndexUnique) 。

JET_errIndexTuplesOneColumnOnly

Windows XP 和更新版本。 Tuple 索引只能超過單一資料行 (,也就是說,如果JET_INDEXCREATE結構的grbit成員已設定JET_bitIndexTuples,而JET_INDEXCREATE結構的szKey成員會指定一個以上的資料行) 。

JET_errIndexTuplesSecondaryIndexOnly

Windows XP 和更新版本。 元組索引不能是主要索引 (,也就是說,JET_INDEXCREATE結構的grbit成員不能同時設定JET_bitIndexPrimary和JET_bitIndexTuples) 。

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP 和更新版本。 Tuple 索引不允許設定JET_INDEXCREATE結構的cbVarSegMac成員。

JET_errIndexTuplesTextColumnsOnly

Windows XP 和更新版本。 Tuple 索引只能位於文字或 Unicode 資料行上。 嘗試索引其他資料行 (,例如二進位資料行) 會導致JET_errIndexTuplesTextColumnsOnly。

JET_errInTransaction

嘗試在交易中建立索引時沒有版本資訊。

JET_errInvalidCodePage

JET_COLUMNCREATE結構的cp成員未設定為有效的字碼頁。 文字資料行的唯一有效值為英文 (1252) 和 Unicode (1200) 。 值為 0 表示預設值將用於英文、1252) (。

JET_errInvalidColumnType

JET_COLUMNCREATE結構的coltyp成員未設定為有效的資料行類型。

JET_errInvalidCreateIndex

此錯誤可能發生的一些原因:

  • JET_TABLECREATE2 結構的 rgindexcreate成員已設定為 Null。

  • JET_TABLECREATE2結構的rgcolumncreate成員已設定為 Null。

  • JET_INDEXCREATE結構的cbStruct成員未設定為有效的值。

JET_errInvalidgrbit

JET_TABLECREATEJET_TABLECREATE2中指定了不正確grbit成員組合。

索引定義無效,因為 grbit 成員包含不一致的值。 一些可能的原因如下:

  • 主要索引具有指定略過位 (,也就是JET_bitIndexPrimary傳遞JET_bitIndexIgnoreNull、JET_bitIndexIgnoreAnyNull或JET_bitIndexIgnoreFirstNull) 。

  • 空的索引不會忽略任何 Null 成員 (,也就是JET_INDEXCREATE結構的grbit成員已設定JET_bitIndexEmpty,但未設定JET_bitIndexIgnoreAnyNull) 。

  • 傳入具有無效grbit成員的JET_CONDITIONALCOLUMN結構。

JET_errInvalidLanguageId

(LCID) 不正確地區設定識別碼) 是透過JET_INDEXCREATE結構中 pidxunicode成員所指向JET_UNICODEINDEX結構的lcid成員,或透過JET_INDEXCREATE結構) 的lcid欄位 (傳入。

JET_errInvalidParameter

指定了不正確參數。 一些可能的原因如下:

  • JET_TABLECREATE2結構的rgcolumncreate成員是 Null。

  • JET_TABLECREATE2 結構之 rgcolumncreate成員中所指定其中一個JET_COLUMNCREATE結構的cbStruct成員未設定為 sizeof ( JET_COLUMNCREATE ) 。

  • JET_INDEXCREATE結構的cbKey成員設定為零。

  • JET_INDEXCREATE結構的cbStruct成員未設定為 sizeof ( JET_INDEXCREATE ) 。

JET_errRecordTooBig

記錄太大。 所有固定資料行JET_COLUMNCREATE結構的cbMax成員總和不得超過特定值。

JET_errTableDuplicate

資料表已經存在。

JET_errTooManyColumns

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

JET_errUnicodeTranslationFail

嘗試正規化 Unicode 資料行時發生錯誤。 這可能是因為系統資源不足所造成。

備註

JetCreateTable 會建立不包含任何資料行的資料表。 若要新增資料行,請參閱 JetAddColumn

在內部, JetCreateTable 會呼叫 JetCreateTableColumnIndex2,以 JET_TABLECREATE2結構填 入:

  • JET_TABLECREATE2.cbStruct = sizeof ( JET_TABLECREATE2 )

  • JET_TABLECREATE2.szTableName = szTableName

  • JET_TABLECREATE2.ulPages = lPage

  • JET_TABLECREATE2.ulDensity = lDensity

  • JET_TABLECREATE2.tableid = JET_tableidNil

內部 JET_TABLECREATE2 結構的其他所有欄位都會設定為零或 Null。 在輸出中, ptableid 會設定為 JET_TABLECREATE2.tableid。

如需詳細資訊,請參閱 JetCreateTableColumnIndex2

如同JetOpenTable,當應用程式使用從 JET_TABLECREATE2結構傳回的tableid成員完成時,通常應該使用JetCloseTable來關閉。

規格需求

需求

用戶端

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

Server

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

標頭

在 Esent.h 中宣告。

程式庫

使用 ESENT.lib。

Dll

需要ESENT.dll。

Unicode

實作為 JetCreateTableW (Unicode) 和 JetCreateTableA (ANSI) 。

另請參閱

JET_DBID
JET_ERR
JET_GRBIT
JET_TABLEID
JET_TABLECREATE2
JetAddColumn
JetCreateTableColumnIndex
JetCreateTableColumnIndex2