列定义格式

MsiViewGetColumnInfoView 对象的 ColumnInfo 属性 使用以下格式来描述数据库列定义。 每个列由函数或属性返回的相应记录字段中的字符串描述。 定义字符串由一个字母组成,表示数据类型后跟列的宽度(如果适用,则为字节)。 零的宽度指定无界宽度(例如长文本字段和流)。 大写字母指示列中允许空值。

列描述符 定义字符串
s? 字符串,可变长度(?=1-255)
s0 字符串,可变长度
i2 短整数
i4 长整数
v0 二进制流
g? 临时字符串 (?=0-255)
j? 临时整数 (?=0,1,2,4)
O0 临时对象

 

用于描述列的字符串与 CREATE 和 ALTER 使用的 SQL 查询字符串具有以下关系。 有关详细信息,请参阅 SQL 语法

返回的值 SQL 语法
s0 LONGCHAR
l0 LONGCHAR LOCALIZABLE
s# CHAR(#)
s# CHARACTER(#)
l # CHAR(#) LOCALIZABLE
l # CHARACTER(#) LOCALIZABLE
i2
i2 INT
i2 整数
i4
v0 对象

 

如果未大写字母,则 SQL 语句应追加为 NOT NULL。

返回的值 SQL 语法
s0 LONGCHAR NOT NULL

 

安装程序不会在内部将列长度限制为列定义格式指定的值。 如果输入到字段中的数据超过指定的列长度,包将无法通过 包验证。 若要在此示例中通过验证,必须更改数据或数据库架构。 更改标准表的列长度的唯一方法是使用 MsiDatabaseExport导出表,编辑导出的 .idt 文件,然后使用 MsiDatabaseImport导入表。 作者无法更改标准表中任何列的列数据类型、可为 null 性或本地化属性。 作者可以使用具有任何列属性的列创建自定义表。

使用 MsiDatabaseMerge 将引用数据库合并到目标数据库中时,列名、主键数和列数据类型必须匹配。 MsiDatabaseMerge 忽略本地化和列长度属性。 如果引用数据库中的列的长度大于目标数据库中该列的长度,MsiDatabaseMerge 目标数据库中的列长度增加到引用数据库中的长度。

使用 Mergmod.dll 版本 2.0 时,将合并模块应用于 .msi 文件永远不会更改现有数据库表的列或列类型的长度。 但是,如果模块将新列添加到表,则合并模块的应用程序可以更改现有数据库表的架构,以便为其添加列。 使用低于版本 2.0 的 Mergemod.dll 版本时,合并模块的应用程序永远不会更改列的长度,也永远不会更改目标数据库的架构。