Condividi tramite


Sintassi SQL

Le stringhe di query SQL per Windows Installer sono limitate ai formati seguenti.

Azione Quesito
Selezionare un gruppo di record SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}]
Eliminare record da una tabella DELETE FROM {table} [WHERE {operation-list}]
Modificare i record esistenti in una tabella UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]Le query UPDATE funzionano solo su colonne chiave non primarie.
Aggiungere record a una tabella IMPOSSIBILE inserire dati binari in una tabella usando direttamente le query INSERT INTO ({column-list}) ({constant-list}) [TEMPORARY]Binary data into a table using the INSERT INTO or UPDATE SQL queries. Per altre informazioni, vedere Aggiunta di dati binari a una tabella tramite SQL.
Aggiungere una tabella È necessario specificare i tipi di colonna CREATE TABLE {table} ( {column} {column type}) [HOLD]Column per ogni colonna durante l'aggiunta di una tabella. È necessario specificare almeno una colonna chiave primaria per la creazione di una nuova tabella. Le possibili sostituzioni per {tipo di colonna} nelle versioni precedenti sono: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...][, ...] Colonna PRIMARY KEY [, column][, ...].
Rimuovere una tabella DROP TABLE {table}
Aggiungere una colonna ALTER TABLE {table} ADD {column} {column type}Il tipo di colonna deve essere specificato durante l'aggiunta di una colonna. Le possibili sostituzioni per {tipo di colonna} nelle versioni precedenti sono: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD].
Tenere e liberare tabelle temporanee ALTER TABLE {table name} HOLDALTER TABLE {table name} FREE
L'utente può usare i comandi HOLD e FREE per controllare l'intervallo di vita di una tabella temporanea o di una colonna temporanea. Il conteggio di blocco in una tabella viene incrementato per ogni operazione SQL HOLD su tale tabella e decrementata per ogni operazione SQL FREE nella tabella. Quando l'ultimo conteggio di blocco viene rilasciato in una tabella, tutte le colonne temporanee diventano inaccessibili. Se tutte le colonne sono temporanee, la tabella diventa inaccessibile.

 

Per altre informazioni, vedere esempi di query di database tramite SQL e script.

Grammatica SQL

I parametri facoltativi vengono visualizzati racchiusi tra parentesi quadre [ ]. Quando vengono elencate diverse opzioni, i parametri facoltativi sono separati da una barra verticale.

Un oggetto {constant} è una stringa o un numero intero. Una stringa deve essere racchiusa tra virgolette singole 'example'. Un {constant-list} è un elenco delimitato da virgole di una o più costanti.

L'opzione LOCALIZABLE imposta un attributo di colonna che indica che la colonna deve essere localizzata.

{column} è un riferimento a colonne a un valore in un campo di una tabella.

Un {marker} è un riferimento di parametro a un valore fornito da un record inviato con la query. È rappresentato nell'istruzione SQL da un punto interrogativo ?. Per informazioni sull'uso dei parametri, vedere la funzioneMsiViewExecute o il metodo Execute.

La sintassi SQL di Windows Installer non supporta l'escape di virgolette singole (valore ASCII 39) in un valore letterale stringa. È tuttavia possibile recuperare o creare il record, impostare il campo con la proprietàStringDatao IntegerData e quindi chiamare il metodoModify. In alternativa, è possibile creare un record e usare i marcatori di parametro (?) descritti in Metodo Execute. È anche possibile eseguire questa operazione usando le funzioni di database MsiViewExecute, MsiRecordSetIntegere MsiRecordSetString.

Una clausola WHERE {operation-list} è facoltativa ed è un raggruppamento di operazioni da utilizzare per filtrare la selezione. Le operazioni devono essere dei tipi seguenti:

  • {column} = {column}
  • {column} = | <> | > | < | >= | <= {constant}
  • {column} = | <> | > | < | >= | <= {marker}
  • {column} è null
  • {column} non è Null

Per i valori stringa, sono possibili solo le operazioni = o <>. I confronti dei valori di oggetto sono limitati a IS NULL e IS NOT NULL.

Le singole operazioni possono essere raggruppate per operatori AND o OR. L'ordinamento può essere imposto tramite parentesi ( ).

La clausola ORDER BY è facoltativa e causa un ritardo iniziale durante l'ordinamento. L'ordinamento in base alle stringhe raggruppa le stringhe identiche, ma non alfabetizzerà le stringhe.

La clausola DISTINCT è facoltativa e non ripete record identici nel set di risultati restituito.

Un {table-list} è un elenco delimitato da virgole di uno o più nomi di tabella denominati {table} nel join.

Un {column-list} è un elenco delimitato da virgole di una o più colonne di tabella denominate {column} selezionate. Le colonne ambigue possono essere ulteriormente qualificate come {tablename.column}. Un asterisco può essere usato come elenco di colonne in una query SELECT per rappresentare tutte le colonne nelle tabelle a cui si fa riferimento. Quando si fa riferimento ai campi in base alla posizione della colonna, selezionare le colonne in base al nome anziché usare l'asterisco. Un asterisco non può essere utilizzato come elenco di colonne in una query INSERT INTO.

Per eseguire l'escape dei nomi di tabella e delle colonne che si scontrano con le parole chiave SQL, racchiudere il nome tra due segni accenti gravi '' (valore ASCII 96). Se un nome di colonna deve essere preceduto da un carattere di escape ed è qualificato come {tablename.column}, la tabella e la colonna devono essere precedute da un carattere di escape singolarmente come {'tablename'.'column'}. È consigliabile che tutti i nomi di tabella e di colonna vengano preceduti da un carattere di escape in questo modo per evitare conflitti con parole riservate e ottenere prestazioni significative.

I nomi delle tabelle sono limitati a 31 caratteri. Per altre informazioni, vedere nomi di tabella. I nomi delle tabelle e delle colonne fanno distinzione tra maiuscole e minuscole. Le parole chiave SQL non fanno distinzione tra maiuscole e minuscole.

Il numero massimo di espressioni in una clausola WHERE di una query SQL è limitato a 32.

Sono supportati solo i inner join e vengono specificati da un confronto di colonne di tabelle diverse. I join circolari non sono supportati. Un join circolare è una query SQL che collega tre o più tabelle in un circuito. Ad esempio, di seguito è riportato un join circolare:

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

Le colonne che fanno parte delle chiavi primarie per una tabella devono essere definite prima in ordine di priorità, seguite da qualsiasi colonna chiave non primaria. Le colonne persistenti devono essere definite prima delle colonne temporanee. La sequenza di ordinamento di una colonna di testo non è definita; Tuttavia, i valori di testo identici raggruppano sempre.

Si noti che quando si aggiunge o si crea una colonna, è necessario specificare il tipo di colonna.

Le tabelle non possono contenere più di una colonna di tipo 'object'.

La dimensione massima che può essere specificata in modo esplicito per una colonna stringa in una query SQL è 255. Una colonna stringa di lunghezza infinita è rappresentata come con dimensione 0. Per altre informazioni, vedere Column Definition Format.

Per eseguire qualsiasi istruzione SQL, è necessario creare una vista. Tuttavia, non è possibile utilizzare una vista che non crea un set di risultati, ad esempio CREATE TABLE o INSERT INTO, con MsiViewModify o il metodo Modify per aggiornare le tabelle tramite la vista.

Si noti che non è possibile recuperare un record contenente dati binari da un database e quindi utilizzare tale record per inserire i dati in un database completamente diverso. Per spostare i dati binari da un database a un altro, è necessario esportare i dati in un file e quindi importarli nel nuovo database tramite una query e la funzione MsiRecordSetStream. In questo modo si garantisce che ogni database disponga di una propria copia dei dati binari.