Синтаксис 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]Двоичные данные нельзя вставить в таблицу напрямую с помощью sql-запросов INSERT INTO или UPDATE. Дополнительные сведения см. в статье Добавление двоичных данных в таблицу с помощью SQL.
Добавление таблицы CREATE TABLE {table} ( {column} {column type}) [HOLD]Типы столбцов должны быть указаны для каждого столбца при добавлении таблицы. Для создания новой таблицы необходимо указать по крайней мере один столбец первичного ключа. Возможные подстановки для {column type} в приведенном выше примере: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | ЦЕЛОЕ ЧИСЛО | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...] [, ...] Столбец PRIMARY KEY [, столбец][, ...].
Удаление таблицы DROP TABLE {table}
Добавление столбца ALTER TABLE {table} ADD {column} {column type}Тип столбца необходимо указать при добавлении столбца. Возможные подстановки для {column type} в приведенном выше примере: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | ЦЕЛОЕ ЧИСЛО | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD].
Удержание и освобождение временных таблиц ALTER TABLE {имя таблицы} HOLDALTER TABLE {имя таблицы} БЕСПЛАТНО
Пользователь может использовать команды HOLD и FREE для управления сроком жизни временной таблицы или временного столбца. Количество удержаний для таблицы увеличивается для каждой операции УДЕРЖАНИЯ SQL в этой таблице и уменьшается для каждой операции 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 . Это гарантирует, что каждая база данных имеет собственную копию двоичных данных.