列定义格式
MsiViewGetColumnInfo 和 View 对象的 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 版本时,合并模块的应用程序永远不会更改列的长度,也永远不会更改目标数据库的架构。