The JetCreateTableColumnIndex function creates a table in an ESE database with an initial set of indexes and an initial set of columns from an array of JET_TABLECREATE structures. The name JetCreateTableColumnIndex comes from the order of creation of the objects. It first creates a table, columns, and then finally indexes.
JET_ERR JET_API JetCreateTableColumnIndex( __in JET_SESID sesid, __in JET_DBID dbid, __in_out JET_TABLECREATE* ptablecreate );
The database session context to use for the API call.
The database identifier to use for the API call.
This function returns the JET_ERR datatype with one of the following return codes. For more information about the possible ESE errors, see Extensible Storage Engine Errors and Error Handling Parameters.
The operation completed successfully.
The callback function could not be resolved. The DLL might not have been found, or the function in the DLL might not have been found. With sufficient logging enabled, the event log will provide more details.
An attempt was made to index over an escrow-update or SLV column (note that SLV columns are deprecated).
If ptablecreate->grbit specifies JET_bitTableCreateTemplateTable, but ptablecreate->szTemplateTableName is set to NULL.
A column already exists.
An attempt was made to index over a non-existent column. Attempting to conditionally index over a non-existent column can also produce this error.
An attempt was made to add a redundant column. There should be no more than one autoincrement column, and no more than one version column per table.
This error will be returned if the ulDensity member of the JET_INDEXCREATE structure is set to a number less than 20 or more than 100.
Signifies that the table named in the szTemplateTableName member of the JET_TABLECREATE structure was not marked as a template table (that is, that table did not have JET_bitTableCreateTemplateTable set).
An attempt to define two identical indexes was made.
An attempt was made to specify more than one primary index for a table. A table must have exactly one primary index. If no primary index is specified, the database engine will transparently create one.
An invalid index definition was specified. Some of the possible reasons for receiving this error are:
Windows XP and later. A tuple index cannot be unique (that is, the grbit member of the JET_INDEXCREATE structure must not have both JET_bitIndexPrimary and JET_bitIndexUnique set).
Windows XP and later. A tuple index can only be over a single column (that is, if the grbit member of the JET_INDEXCREATE structure has JET_bitIndexTuples set, and the szKey member of the JET_INDEXCREATE structure specifies more than one column).
Windows XP and later. A tuple index cannot be a primary index (that is, the grbit member of the JET_INDEXCREATE structure must not have both JET_bitIndexPrimary and JET_bitIndexTuples set).
Windows XP and later. A tuple index can only be on a text or Unicode column. An attempt to index other columns (such as binary columns) will result in JET_errIndexTuplesTextColumnsOnly.
Windows XP and later. A tuple index does not allow the cbVarSegMac member of the JET_INDEXCREATE structure to be set.
An attempt was made to create an index without version information while in a transaction.
The cp member of the JET_COLUMNCREATE structure was not set to a valid code page. The only valid values for text columns are English (1252) and Unicode (1200). A value of 0 means the default will be used (English, 1252).
The coltyp member of the JET_COLUMNCREATE structure was not set to a valid column type.
Some of the reasons this error may occur:
The index definition is invalid because the grbit member contains inconsistent values. Some possible reasons are:
An invalid Locale ID (LCID) was passed in (either through the lcid member of the JET_UNICODEINDEX structure which is pointed to by the pidxunicode member in the JET_INDEXCREATE structure, or through the lcid field of the JET_INDEXCREATE structure).
An invalid parameter was given. Some possible reasons are:
The record is too big. The sum of the cbMax member of the JET_COLUMNCREATE structure for all fixed columns must not exceed a certain value.
The table already exists.
An attempt was made to add too many columns to the table. A table can have no more than JET_ccolFixedMost fixed columns, no more than JET_ccolVarMost variable-length columns, and no more than JET_ccolTaggedMost tagged columns.
An error occurred attempting to normalize a Unicode column. This can be caused by running out of system resources.
Calling JetCreateTableColumnIndex is identical to calling JetCreateTableColumnIndex2, with each field in the JET_TABLECREATE2 structure containing the value of the corresponding field of JET_TABLECREATE, with the following exceptions:
JET_TABLECREATE2.cbStruct set to sizeof( JET_TABLECREATE2)
JET_TABLECREATE2.szCallback set to NULL
JET_TABLECREATE2.cbtyp set to 0
See JetCreateTableColumnIndex2 for more details.
Requires Windows Vista, Windows XP, or Windows 2000 Professional.
Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server.
Declared in Esent.h.
Implemented as JetCreateTableColumnIndexW (Unicode) and JetCreateTableColumnIndexA (ANSI).