Partilhar via


Sintaxe SQL

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

Ação Consulta
Selecionar um grupo de registos SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}]
Excluir registros de uma tabela EXCLUIR DE {table} [WHERE {operation-list}]
Modificar registros existentes em uma tabela UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [ONDE {lista de operações}]As consultas UPDATE só funcionam em colunas de chave não primária.
Adicionar registos a uma tabela INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORÁRIO]Os 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]Os 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} no texto acima são: CHAR [( {size} )] | CARACTERE [( {tamanho} )] | LONGCHAR - BRASIL | CURTA | INT | INTEIRO | LONGO | OBJECT [NOT NULL] [TEMPORÁRIO] [LOCALIZÁVEL] [, coluna...][, ...] Coluna CHAVE PRIMÁRIA [, column][, ...].
Remover uma tabela DROP TABLE {tabela}
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} no texto acima são: CHAR [( {size} )] | CARACTERE [( {tamanho} )] | LONGCHAR - BRASIL | CURTA | INT | INTEIRO | LONGO | OBJETO [NÃO NULO] [TEMPORÁRIO] [LOCALIZÁVEL] [HOLD].
Segure e libere mesas temporárias ALTER TABLE {nome da tabela} HOLDALTER TABLE {nome da tabela} GRÁTIS
O usuário pode usar os comandos HOLD e FREE para controlar a vida útil de uma tabela temporária ou de uma coluna temporária. A contagem de retenção em uma tabela é incrementada para cada operação SQL HOLD nessa tabela e diminuída para cada operação SQL FREE na tabela. Quando a última contagem de espera é 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 ede script .

Gramática SQL

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

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

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

Uma {coluna} é uma referência colunar 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ção MsiViewExecute ou o método Execute.

A sintaxe SQL do Windows Installer não suporta a fuga 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 o StringData ou propriedade IntegerData e, em seguida, chamar o Modify método. 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 usado para filtrar a seleção. As operações devem ser dos seguintes tipos:

  • {coluna} = {coluna}
  • {coluna} = | <> | > | < | >= | <= {constante}
  • {coluna} = | <> | > | < | >= | <= {marcador}
  • {column} é null
  • {column} não é nulo

Para valores de cadeia de caracteres, somente as operações = ou <> são possíveis. As comparações de valores 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 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 tabelas referidos como {table} na junção.

Uma {column-list} é uma lista delimitada por vírgulas de uma ou mais colunas da tabela referidas como {column} selecionadas. Colunas ambíguas podem ser 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 fazer referência a campos por posição de coluna, selecione as colunas por 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 de nomes de tabelas e nomes de colunas que entrem em conflito com palavras-chave SQL, coloque o nome entre duas marcas de acento grave '' (valor ASCII 96). Se um nome de coluna precisar escapar e for qualificado como {tablename.column}, a tabela e a coluna deverão ser escapadas individualmente como {'tablename'.'column'}. Recomenda-se que todos os nomes de tabelas e nomes de colunas sejam evitados desta forma para evitar conflitos com palavras reservadas e ganhar um desempenho significativo.

Os nomes das tabelas são limitados a 31 caracteres. Para obter mais informações, consulte Nomes de tabela. Os nomes de tabelas e colunas 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 são suportadas 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 juntas 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 da(s) chave(s) primária(s) de uma tabela devem ser definidas primeiro em ordem de prioridade, seguidas por quaisquer colunas de chave não primária. 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 não podem conter mais do que uma coluna do tipo «objeto».

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 tamanho 0. Para obter mais informações, consulte Column Definition Format.

Para executar qualquer instrução SQL, uma exibição deve ser criada. No entanto, um modo de exibição que não cria um conjunto de resultados, como CREATE TABLE ou INSERT INTO, não pode ser usado com MsiViewModify ou o método Modify para atualizar tabelas através do 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, em seguida, importá-los para o novo banco de dados por meio de uma consulta e da funçãoMsiRecordSetStream. Isso garante que cada banco de dados tenha sua própria cópia dos dados binários.