Compartilhar via


Sintaxe do SQL

As cadeias de caracteres de consulta SQL para Windows Installer são restritas aos seguintes formatos.

Ação Consulta
Selecionar um grupo de registros SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}]
Excluir registros de uma tabela DELETE FROM {table} [WHERE {operation-list}]
Modificar registros existentes em uma tabela UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]As consultas UPDATE funcionam apenas em colunas de chave nãoprimárias.
Adicionar registros a uma tabela INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Dados binários não podem ser inseridos em uma tabela diretamente usando as consultas INSERT INTO ou UPDATE SQL. Para obter mais informações, consulte Adicionando dados binários a uma tabela usando o SQL.
Adicionar uma tabela CREATE TABLE {table} ( {column} {column type}) [HOLD]Tipos de coluna devem ser especificados para cada coluna ao adicionar uma tabela. Pelo menos uma coluna de chave primária deve ser especificada para a criação de uma nova tabela. As possíveis substituições para {tipo de coluna} são: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [TEMPORÁRIO] [LOCALIZABLE] [, column...][, ...] Coluna PRIMARY KEY [, coluna][, ...].
Remover uma tabela DROP TABLE {table}
Adicionar uma coluna ALTER TABLE {table} ADD {column} {column type}O tipo de coluna deve ser especificado ao adicionar uma coluna. As possíveis substituições para {tipo de coluna} são: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [TEMPORÁRIO] [LOCALIZABLE] [HOLD].
Manter e liberar tabelas temporárias ALTER TABLE {table name} HOLDALTER TABLE {table name} FREE
O usuário pode usar os comandos HOLD e FREE para controlar o tempo de vida de uma tabela temporária ou de uma coluna temporária. A contagem de espera em uma tabela é incrementada para cada operação SQL HOLD nessa tabela e decrementada para cada operação SQL FREE na tabela. Quando a última contagem de retenção é liberada em uma tabela, todas as colunas temporárias ficam inacessíveis. Se todas as colunas forem temporárias, a tabela ficará inacessível.

 

Para obter mais informações, consulte exemplos de consultas de banco de dados usando SQL e script.

Gramática SQL

Os parâmetros opcionais são mostrados entre colchetes [ ]. Quando várias opções são listadas, os parâmetros opcionais são separados por uma barra vertical.

Uma {constant} é uma cadeia de caracteres ou um inteiro. Uma cadeia de caracteres deve ser colocada entre aspas simples como "exemplo". Uma {constant-list} é uma lista delimitada por vírgulas de uma ou mais constantes.

A opção LOCALIZABLE define um atributo de coluna que indica que a coluna precisa ser localizada.

Uma {column} é uma referência columnar a um valor em um campo de uma tabela.

Um {marker} é uma referência de parâmetro a um valor fornecido por um registro enviado com a consulta. Ele é representado na instrução SQL por um ponto de interrogação ?. Para obter informações sobre o uso de parâmetros, consulte a funçãoMsiViewExecute ou o método Execute.

A sintaxe sql do Windows Installer não dá suporte ao escape de aspas simples (valor ASCII 39) em um literal de cadeia de caracteres. No entanto, você pode buscar ou criar o registro, definir o campo com a propriedade StringData ou integerData e, em seguida, chamar o método Modify. Como alternativa, você pode criar um registro e usar os marcadores de parâmetro (?) descritos em método Execute. Você também pode fazer isso usando as funções de banco de dados msiViewExecute, msiRecordSetIntegere MsiRecordSetString.

Uma cláusula WHERE {operation-list} é opcional e é um agrupamento de operações a ser usada para filtrar a seleção. As operações devem ser dos seguintes tipos:

  • {column} = {column}
  • {column} = | <> | > | < | >= | <= {constant}
  • {column} = | <> | > | < | >= | <= {marker}
  • {column} é nulo
  • {column} não é nulo

Para valores de cadeia de caracteres, somente as operações = ou <> são possíveis. As comparações de valor de objeto são limitadas a IS NULL e IS NOT NULL.

As operações individuais podem ser agrupadas por operadores AND ou OR. A ordenação pode ser imposta pelo uso de parênteses ( ).

A cláusula ORDER BY é opcional e causa um atraso inicial durante a classificação. A ordenação por cadeias de caracteres agrupará cadeias de caracteres idênticas, mas não alfabetizará as cadeias de caracteres.

A cláusula DISTINCT é opcional e não repete registros idênticos no conjunto de resultados retornado.

Uma {table-list} é uma lista delimitada por vírgulas de um ou mais nomes de tabela conhecidos como {table} na junção.

Uma {column-list} é uma lista delimitada por vírgulas de uma ou mais colunas de tabela conhecidas como {column} selecionadas. Colunas ambíguas podem ser mais qualificadas como {tablename.column}. Um asterisco pode ser usado como uma lista de colunas em uma consulta SELECT para representar todas as colunas nas tabelas referenciadas. Ao referenciar campos por posição de coluna, selecione as colunas pelo nome em vez de usar o asterisco. Um asterisco não pode ser usado como uma lista de colunas em uma consulta INSERT INTO.

Para escapar nomes de tabela e nomes de coluna que se chocam com palavras-chave SQL, coloque o nome entre duas marcas de acento grave '' (valor ASCII 96). Se um nome de coluna precisar ser escapado e for qualificado como {tablename.column}, a tabela e a coluna deverão ser escapadas individualmente como {'tablename'.'column'}. É recomendável que todos os nomes de tabela e nomes de coluna sejam escapados dessa forma para evitar conflitos com palavras reservadas e obter um desempenho significativo.

Os nomes de tabela são limitados a 31 caracteres. Para obter mais informações, consulte Nomes de Tabela. Nomes de tabela e coluna diferenciam maiúsculas de minúsculas. As palavras-chave SQL não diferenciam maiúsculas de minúsculas.

O número máximo de expressões em uma cláusula WHERE de uma consulta SQL é limitado a 32.

Somente junções internas têm suporte e são especificadas por uma comparação de colunas de tabelas diferentes. Não há suporte para junções circulares. Uma junção circular é uma consulta SQL que vincula três ou mais tabelas em um circuito. Por exemplo, o seguinte é uma junção circular:

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

As colunas que fazem parte das chaves primárias de uma tabela devem ser definidas primeiro na ordem de prioridade, seguidas por colunas de chave nãoprimárias. As colunas persistentes devem ser definidas antes das colunas temporárias. A sequência de classificação de uma coluna de texto é indefinida; no entanto, valores de texto idênticos sempre se agrupam.

Observe que, ao adicionar ou criar uma coluna, você deve especificar o tipo de coluna.

As tabelas podem não conter mais de uma coluna do tipo 'object'.

O tamanho máximo que pode ser especificado explicitamente para uma coluna de cadeia de caracteres em uma consulta SQL é 255. Uma coluna de cadeia de caracteres de comprimento infinito é representada como tendo o tamanho 0. Para obter mais informações, consulte de formato de definição de coluna.

Para executar qualquer instrução SQL, um modo de exibição deve ser criado. No entanto, uma exibição que não cria um conjunto de resultados, como CREATE TABLE ou INSERT INTO, não pode ser usada com MsiViewModify ou o método Modify para atualizar tabelas no modo de exibição.

Observe que você não pode buscar um registro contendo dados binários de um banco de dados e, em seguida, usar esse registro para inserir os dados em um banco de dados completamente diferente. Para mover dados binários de um banco de dados para outro, você deve exportar os dados para um arquivo e importá-los para o novo banco de dados por meio de uma consulta e da função MsiRecordSetStream. Isso garante que cada banco de dados tenha sua própria cópia dos dados binários.