Формат определения столбца

MsiViewGetColumnInfo и свойство ColumnInfo объекта View используют следующий формат для описания определений столбцов базы данных. Каждый столбец описывается строкой в соответствующем поле записи, возвращаемом функцией или свойством. Строка определения состоит из одной буквы, представляющей тип данных, за которой следует ширина столбца (в символах, если применимо, в байтах в противном случае). Нулевая ширина обозначает неограничимую ширину (например, длинные текстовые поля и потоки). Прописная буква указывает, что в столбце разрешены значения NULL.

Дескриптор столбца Строка определения
s? Строка, переменная длина (?=1–255)
s0 Строка, переменная длина
i2 Короткое целое число
i4 Long integer
v0 Двоичный поток
Г? Временная строка (?=0-255)
J? Временное целое число (?=0,1,2,4)
O0 Временный объект

 

Строки, используемые для описания столбцов, имеют следующую связь со строками SQL-запросов, используемыми в инструкциях CREATE и ALTER. Дополнительные сведения см. в разделе Синтаксис SQL.

Возвращаемое значение Синтаксис SQL
s0 LONGCHAR
l0 ЛОКАЛИЗУЕМЫЙ LONGCHAR
s # CHAR(#)
s # CHARACTER(#)
L # CHAR(#) LOCALIZABLE
L # CHARACTER(#) LOCALIZABLE
i2 SHORT
i2 INT
i2 ЦЕЛОЕ ЧИСЛО
i4 LONG
v0 OBJECT

 

Если буква не прописная, инструкция SQL должна быть добавлена с параметром NOT NULL.

Возвращаемое значение Синтаксис SQL
s0 LONGCHAR NOT NULL

 

Установщик внутренне не ограничивает длину столбцов значением, указанным в формате определения столбца. Если данные, введенные в поле, превышают указанную длину столбца, пакет не пройдет проверку пакета. Для прохождения проверки в этом случае необходимо изменить данные или схему базы данных. Единственным способом изменения длины столбца стандартной таблицы является экспорт таблицы с помощью MsiDatabaseExport, редактирование экспортированного IDT-файла, а затем импорт таблицы с помощью MsiDatabaseImport. Авторы не могут изменять типы данных столбцов, допустимость значений NULL или атрибуты локализации столбцов в стандартных таблицах. Авторы могут создавать настраиваемые таблицы со столбцами, имеющими любые атрибуты столбца.

При использовании MsiDatabaseMerge для объединения эталонной базы данных с целевой базой данных имена столбцов, количество первичных ключей и типы данных столбцов должны совпадать. MsiDatabaseMerge игнорирует атрибуты локализации и длины столбца. Если длина столбца в эталонной базе данных равна 0 или больше длины этого столбца в целевой базе данных, MsiDatabaseMerge увеличивает длину столбца в целевой базе данных до длины в эталонной базе данных.

При использовании Mergmod.dll версии 2.0 применение модуля слияния к файлу .msi никогда не изменяет длину столбцов или типы столбцов существующей таблицы базы данных. Однако применение модуля слияния может изменить схему существующей таблицы базы данных, если модуль добавляет новые столбцы в таблицу, для которой допустимо добавлять столбцы. При использовании Mergemod.dll версии ниже версии 2.0 применение модуля слияния никогда не изменяет длину столбцов и схему целевой базы данных.