Sintassi SQL
Le stringhe di query SQL per Windows Installer sono limitate ai formati seguenti.
Azione | Query |
---|---|
Selezionare un gruppo di record | SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}] |
Eliminare i 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 nonprimari. |
Aggiungere record a una tabella | INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Binary data non può essere inserito in una tabella direttamente usando le query INSERT INTO o UPDATE SQL. Per altre informazioni, vedere Aggiunta di dati binari a una tabella tramite SQL. |
Aggiungere una tabella | CREATE TABLE {table} ( {column} {column type}) [HOLD]Column type deve essere specificato per ogni colonna quando si aggiunge una tabella. Per la creazione di una nuova tabella, è necessario specificare almeno una colonna chiave primaria. Le possibili sostituzioni per {tipo di colonna} in precedenza sono: CHAR [( {size} )] | CARATTERE [( {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 quando si aggiunge una colonna. Le possibili sostituzioni per {tipo di colonna} in precedenza sono: CHAR [( {size} )] | CARATTERE [( {size} )] | LONGCHAR | SHORT | INT | INTEGER | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD]. |
Tenere e liberare tabelle temporanee | ALTER TABLE {nome tabella} HOLDALTER TABLE {nome tabella} 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 su una tabella viene incrementato per ogni operazione DI CONSERVAZIONE SQL in tale tabella e decrementata per ogni operazione SQL FREE nella tabella. Quando l'ultimo conteggio di attesa 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 sono elencate diverse scelte, i parametri facoltativi sono separati da una barra verticale.
Una {costante} è una stringa o un 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.
Un {column} è un riferimento colonnare 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 funzione MsiViewExecute o il metodo Execute .
La sintassi SQL di Windows Installer non supporta l'uscita di virgolette singole (valore ASCII 39) in un valore letterale stringa. È tuttavia possibile recuperare o creare il record, impostare il campo con la proprietà StringData o IntegerData e quindi chiamare il metodo Modify . In alternativa, è possibile creare un record e usare i marcatori dei parametri (?) descritti in Esegui metodo. È anche possibile usare le funzioni di database MsiViewExecute, MsiRecordSetInteger e 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} = | <> | > | < | > = | <= {costante}
- {column} = | <> | > | < | > = | <= {marker}
- {column} è Null
- {column} non è Null
Per i valori stringa, sono possibili solo le operazioni = o <> . I confronti dei valori dell'oggetto sono limitati a IS NULL e NON NULL.
Le singole operazioni possono essere raggruppate da 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 per 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 fanno riferimento ai campi in base alla posizione della colonna, selezionare le colonne in base al nome anziché usare l'asterisco. Non è possibile usare un asterisco come elenco di colonne in una query INSERT INTO.
Per eseguire l'escape dei nomi di tabella e dei nomi di colonna che si scontrano con le parole chiave SQL, racchiudere il nome tra due segni di accento grave '' (valore ASCII 96). Se un nome di colonna deve essere escape ed è qualificato come {tablename.column}, la tabella e la colonna devono essere escape singolarmente come {'tablename'.'column'}. È consigliabile che tutti i nomi di tabella e i nomi di colonna vengano eliminati in questo modo per evitare conflitti con parole riservate e ottenere prestazioni significative.
I nomi di tabella sono limitati a 31 caratteri. Per altre informazioni, vedere Nomi tabelle. I nomi di tabella e colonna sono distinzione tra maiuscole e minuscole. Le parole chiave SQL non sono distinzione tra maiuscole e minuscole.
Il numero massimo di espressioni in una clausola WHERE di una query SQL è limitato a 32.
Solo i join interni sono supportati e vengono specificati da un confronto di colonne da 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, si tratta di 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 nell'ordine di priorità, seguite da qualsiasi colonna chiave nonprimaria. 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 possono non 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 dimensioni 0. Per altre informazioni, vedere Formato definizione colonna.
Per eseguire qualsiasi istruzione SQL, è necessario creare una vista. Tuttavia, una vista che non crea un set di risultati, ad esempio CREATE TABLE o INSERT INTO, non può essere usata con MsiViewModify o il metodo Modify per aggiornare le tabelle anche se la visualizzazione.
Si noti che non è possibile recuperare un record contenente dati binari da un database e quindi usare 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 . Ciò garantisce che ogni database disponga della propria copia dei dati binari.