Column Definition Format

Windows Installer

Column Definition Format

MsiViewGetColumnInfo and the ColumnInfo Property of the View object use the following format to describe database column definitions. Each column is described by a string in the corresponding record field returned by the function or property. The definition string consists of a single letter representing the data type followed by the width of the column (in characters when applicable, bytes otherwise). A width of zero designates an unbounded width (for example, long text fields and streams). An uppercase letter indicates that null values are allowed in the column.

Column descriptor Definition string
s? String, variable length (?=1-255)
s0 String, variable length
i2 Short integer
i4 Long integer
v0 Binary Stream
g? Temporary string (?=0-255)
j? Temporary integer (?=0,1,2,4)
O0 Temporary object

 

The strings used to describe columns have the following relationship to the SQL query strings used by CREATE and ALTER. For more information, see SQL Syntax.

Returned value SQL syntax
s0 LONGCHAR
l0 LONGCHAR LOCALIZABLE
s # CHAR(#)
s # CHARACTER(#)
l #     CHAR(#) LOCALIZABLE
l #     CHARACTER(#) LOCALIZABLE
i2 SHORT
i2 INT
i2 INTEGER
i4 LONG
v0 OBJECT

 


If the letter is not capitalized, the SQL statement should be appended with NOT NULL.

Returned value SQL syntax
s0 LONGCHAR NOT NULL

 


The installer does not internally limit the length of columns to the value specified by the column definition format. If the data entered into a field exceeds the specified column length, the package fails to pass package validation. To pass validation in this case, either the data or the database schema must be changed. The only means to change the column length of a standard table is by exporting the table using MsiDatabaseExport, editing the exported .idt file, and then importing the table using MsiDatabaseImport. Authors cannot change the column data types, nullability, or localization attributes of any columns in standard tables. Authors can create custom tables with columns having any column attributes.

When using MsiDatabaseMerge to merge a reference database into a target database, the column names, number of primary keys, and column data types must match. MsiDatabaseMerge ignores the localization and column length attributes. If a column in the reference database has a length that is 0 or greater than the that column's length in the target database, MsiDatabaseMerge increases the column length in the target database to the length in the reference database.

When using Mergmod.dll version 2.0, the application of a merge module to a .msi file never changes the length of columns or the column types of an existing database table. The application of a merge module can however change the schema of an existing database table if the module adds new columns to a table for which it is valid to add columns. When using a Mergemod.dll version less than version 2.0, the application of a merge module never changes the length of columns and never changes the schema of the target database.


Send comments about this topic to Microsoft

Build date: 8/13/2009

© 2009 Microsoft Corporation. All rights reserved.