Last modified: March 09, 2015

Applies to: Windows | Windows Server

The JET_COLUMNDEF structure defines the data that can be stored in a column.

typedef struct {
  unsigned long cbStruct;
  JET_COLUMNID columnid;
  JET_COLTYP coltyp;
  unsigned short wCountry;
  unsigned short langid;
  unsigned short cp;
  unsigned short wCollate;
  unsigned long cbMax;
  JET_GRBIT grbit;



The size of the structure, in bytes. It must be set to sizeof( JET_COLUMNDEF).


Reserved. columnid must be set to 0 (zero).


The type of the column (for example, text, binary, or numerical). For more information, see JET_COLTYP.


Reserved. wCountry must be set to 0 (zero).


Obsolete. langid should be set to 0 (zero).


The code page for the column. The only valid values for text columns are English (1252) and Unicode (1200). A value of zero means the default will be used (English, 1252). If the column is not a text column, the code page automatically gets set to zero.


Reserved. wCollate must be set to 0 (zero).


The maximum length, in bytes, of a variable-length column, or the length of a fixed-length column.


A group of bits that contain the options to be used for this call, which include zero or more of the following values.




The column will be fixed. It will always use the same amount of space in a row, regardless of how much data is being stored in the column. JET_bitColumnFixed cannot be used with JET_bitColumnTagged. This bit cannot be used with long values (that is JET_coltypLongText and JET_coltypLongBinary).


The column will be tagged. Tagged columns do not take up any space in the database if they do not contain data. This bit cannot be used with JET_bitColumnFixed.


The column must never be set to a NULL value.


The column is a version column that specifies the version of the row. The value of this column starts at zero and will be automatically incremented for each update on the row.

This bit can only be applied to JET_coltypLong columns. This bit cannot be used with JET_bitColumnAutoincrement, JET_bitColumnEscrowUpdate, or JET_bitColumnTagged.


The column will automatically be incremented. The number is an increasing number, and is guaranteed to be unique within a table. The numbers, however, might not be continuous. For example, if five rows are inserted into a table, the "autoincrement" column could contain the values { 1, 2, 6, 7, 8 }. This bit can only be used on columns of type JET_coltypLong or JET_coltypCurrency.

Windows 2000:  In Windows 2000, this bit can only be used on columns of type JET_coltypLong.


This bit is valid only on calls to JetGetColumnInfo.


This bit is valid only on calls to JetOpenTable.


This bit is valid only on calls to JetOpenTempTable.


The column can be multi-valued. A multi-valued column can have zero, one, or more values associated with it. The various values in a multi-valued column are identified by a number called the itagSequence member, which belongs to various structures, including: JET_RETINFO, JET_SETINFO, JET_SETCOLUMN, JET_RETRIEVECOLUMN, and JET_ENUMCOLUMNVALUE. Multi-valued columns must be tagged columns; that is, they cannot be fixed-length or variable-length columns.


Specifies that a column is an escrow update column. An escrow update column can be updated concurrently by different sessions with JetEscrowUpdate and will maintain transactional consistency. An escrow update column must also meet the following conditions:

  • An escrow update column can be created only when the table is empty.

  • An escrow update column must be of type JET_coltypLong.

  • An escrow update column must have a default value (that is cbDefault must be positive).

  • JET_bitColumnEscrowUpdate cannot be used in conjunction with JET_bitColumnTagged, JET_bitColumnVersion, or JET_bitColumnAutoincrement.


The column will be created in an without version information. This means that other transactions that attempt to add a column with the same name will fail. This bit is only useful with JetAddColumn. It cannot be used within a transaction.


Reserved for future use.


Use JET_bitColumnDeleteOnZero instead of JET_bitColumnFinalize. JET_bitColumnFinalize that a column can be finalized. When a column that can be finalized has an escrow update column that reaches zero, the row will be deleted. Future versions might invoke a callback function instead (For more information, see JET_CALLBACK). A column that can be finalized must be an escrow update column. JET_bitColumnFinalize cannot be used with JET_bitColumnUserDefinedDefault.


The default value for a column will be provided by a callback function. See JET_CALLBACK. A column that has a user-defined default must be a tagged column. Specifying JET_bitColumnUserDefinedDefault means that pvDefault must point to a JET_USERDEFINEDDEFAULT structure, and cbDefault must be set to sizeof( JET_USERDEFINEDDEFAULT ).

  • JET_bitColumnUserDefinedDefault cannot be used in conjunction with JET_bitColumnFixed, JET_bitColumnNotNULL, JET_bitColumnVersion, JET_bitColumnAutoincrement, JET_bitColumnUpdatable, JET_bitColumnEscrowUpdate, JET_bitColumnFinalize, JET_bitColumnDeleteOnZero, or JET_bitColumnMaybeNull.


The column is an escrow update column, and when it reaches zero, the record will be deleted. A common use for a column that can be finalized is to use it as a reference count field, and when the field reaches zero the record gets deleted. JET_bitColumnDeleteOnZero is related to JET_bitColumnFinalize. A Delete-on-zero column must be an escrow update column. JET_bitColumnDeleteOnZero cannot be used with JET_bitColumnFinalize. JET_bitColumnDeleteOnZero cannot be used with user defined default columns.



Requires Windows Vista, Windows XP, or Windows 2000 Professional.


Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server.


Declared in Esent.h.

See Also