Синтаксис SQL

Строки sql-запросов для установщика Windows ограничены следующими форматами.

Действие Запрос
Выбор группы записей SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}]
Удаление записей из таблицы DELETE FROM {table} [WHERE {operation-list}]
Изменение существующих записей в таблице UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}] Запросы UPDATE работают только с ключевыми столбцами, не относящиеся к примарии.
Добавление записей в таблицу INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Двоичные данные невозможно вставить в таблицу напрямую с помощью запросов INSERT INTO или UPDATE SQL. Дополнительные сведения см. в разделе "Добавление двоичных данных в таблицу с помощью SQL".
Добавление таблицы CREATE TABLE {table} ( {column} {column type}) [HOLD]Column types must be specified for each column when adding a table. Для создания новой таблицы необходимо указать по крайней мере один столбец первичного ключа. Возможные подстановки для {column type} в приведенном выше примере: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [ВРЕМЕННЫЙ] [LOCALIZABLE] [, столбец...] [, ...] Столбец PRIMARY KEY [, столбец][, ...].
Удаление таблицы DROP TABLE {table}
Добавление столбца ALTER TABLE {table} ADD {column} {column type}Тип столбца необходимо указать при добавлении столбца. Возможные подстановки для {column type} в приведенном выше примере: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [ВРЕМЕННЫЙ] [LOCALIZABLE] [HOLD].
Удержание и освобождение временных таблиц ALTER TABLE {имя таблицы} HOLDALTER TABLE {имя таблицы} FREE
Пользователь может использовать команды HOLD и FREE для управления временем существования временной таблицы или временного столбца. Количество удержаний в таблице увеличивается для каждой операции SQL HOLD в этой таблице и уменьшается для каждой операции SQL FREE в таблице. При освобождении последнего количества удержаний в таблице все временные столбцы становятся недоступными. Если все столбцы являются временными, таблица становится недоступной.

 

Дополнительные сведения см. в примерах запросов к базе данных с помощью SQL и скрипта.

Грамматика SQL

Необязательные параметры отображаются в квадратных скобках [ ]. При перечислении нескольких вариантов необязательные параметры разделяются вертикальной полосой.

{constant} — это строка или целое число. Строка должна быть заключена в одинарные кавычки "example". {constant-list} — это список с разделителями-запятыми одной или нескольких констант.

Параметр LOCALIZABLE задает атрибут столбца, указывающий, что столбец должен быть локализован.

{column} — это столбец, ссылающийся на значение в поле таблицы.

{marker} — это ссылка на значение, предоставленное записью, отправленной запросом. Он представлен в инструкции SQL вопросительным знаком ?. Сведения об использовании параметров см. в функции MsiViewExecute или методе Execute .

Синтаксис SQL установщика Windows не поддерживает экранирование одинарных кавычек (значение ASCII 39) в строковом литерале. Однако вы можете получить или создать запись, задать поле со свойством StringData или IntegerData , а затем вызвать метод Modify . Кроме того, можно создать запись и использовать маркеры параметров (?), описанные в методе Execute . Это также можно сделать с помощью функций базы данных MsiViewExecute, MsiRecordSetInteger и MsiRecordSetString.

Предложение WHERE {operation-list} является необязательным и представляет собой группирование операций, которые будут использоваться для фильтрации выделения. Операции должны иметь следующие типы:

  • {column} = {column}
  • {column} = | <> | > | < | > = | <= {constant}
  • {column} = | <> | > | < | > = | <= {marker}
  • {column} имеет значение NULL
  • {column} не имеет значения NULL

Для строковых значений возможны только значения = или <> операции. Сравнение значений объектов ограничено значением IS NULL и IS NOT NULL.

Отдельные операции можно сгруппировать по операторам AND или OR. Порядок можно навязать с помощью круглых скобок ().

Предложение ORDER BY является необязательным и вызывает начальную задержку во время сортировки. Упорядочивание по строкам группирует идентичные строки вместе, но не будет алфавитизировать строки.

Предложение DISTINCT является необязательным и не повторяет идентичные записи в возвращенном результирующем наборе.

{table-list} — это разделенный запятыми список из одного или нескольких имен таблиц, называемых {table} в соединении.

{column-list} — это разделенный запятыми список одного или нескольких столбцов таблицы, которые называются выбранными {column}. Неоднозначные столбцы могут быть дополнительно квалифицированы как {tablename.column}. Звездочка может использоваться в качестве списка столбцов в запросе SELECT для представления всех столбцов в таблицах, на которые ссылается ссылка. При ссылке на поля по позиции столбца выберите столбцы по имени вместо звездочки. Звездочка не может использоваться в качестве списка столбцов в запросе INSERT INTO.

Чтобы экранировать имена таблиц и столбцов, которые сталкиваются с ключевыми словами SQL, заключите имя между двумя серьезными знаками "" (значение ASCII 96). Если имя столбца должно быть экранировано и квалифицируется как {tablename.column}, таблица и столбец должны быть экранированы по отдельности как {'tablename'.'column'}. Рекомендуется экранировать все имена таблиц и столбцов таким образом, чтобы избежать столкновений с зарезервированными словами и добиться значительной производительности.

Имена таблиц ограничены 31 символами. Дополнительные сведения см. в разделе "Имена таблиц". Имена таблиц и столбцов чувствительны к регистру. Ключевые слова SQL не чувствительны к регистру.

Максимальное количество выражений в предложении WHERE запроса SQL ограничено 32.

Поддерживаются только внутренние соединения и задаются сравнением столбцов из разных таблиц. Циклические соединения не поддерживаются. Циклическое соединение — это SQL-запрос, который связывает три или более таблиц с каналом. Например, следующее является циклическим соединением:

WHERE Table1.Field1=Table2.Field1 AND Table2.Field2=Table3.Field1 AND Table3.Field2=Table1.Field2.

Столбцы, являющиеся частью первичных ключей для таблицы, должны быть определены в первую очередь в порядке приоритета, за которым следуют все непримарные ключевые столбцы. Постоянные столбцы должны быть определены перед временными столбцами. Последовательность сортировки текстового столбца не определена; однако идентичные текстовые значения всегда группироваться вместе.

Обратите внимание, что при добавлении или создании столбца необходимо указать тип столбца.

Таблицы могут содержать не более одного столбца типа object.

Максимальный размер, который можно явно указать для строкового столбца в SQL-запросе, равен 255. Строковый столбец бесконечной длины представлен как имеющий размер 0. Дополнительные сведения см. в разделе "Формат определения столбца".

Для выполнения любой инструкции SQL необходимо создать представление. Однако представление, которое не создает результирующий набор, например CREATE TABLE или INSERT INTO, нельзя использовать с MsiViewModify или методом Modify для обновления таблиц, хотя представление.

Обратите внимание, что вы не можете получить запись, содержащую двоичные данные из одной базы данных, а затем использовать эту запись для вставки данных в совершенно другую базу данных. Чтобы переместить двоичные данные из одной базы данных в другую, необходимо экспортировать данные в файл, а затем импортировать их в новую базу данных с помощью запроса и функции MsiRecordSetStream . Это гарантирует, что каждая база данных имеет собственную копию двоичных данных.