Delen via


SQL-syntaxis

De SQL-queryreeksen voor Windows Installer zijn beperkt tot de volgende indelingen.

Actie Vraag
Een groep records selecteren SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}]
Records uit een tabel verwijderen DELETE FROM {table} [WHERE {operation-list}]
Bestaande records in een tabel wijzigen UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]UPDATE-query's werken alleen voor niet-primaire sleutelkolommen.
Records toevoegen aan een tabel INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TIJDELIJK]Binaire gegevens kunnen niet rechtstreeks in een tabel worden ingevoegd met behulp van de SQL-query's INSERT INTO of BIJWERKEN. Zie Binaire gegevens toevoegen aan een tabel met behulp van SQLvoor meer informatie.
Een tabel toevoegen CREATE TABLE {table} ( {column} {column type}) [HOLD]Kolomtypen moeten worden opgegeven voor elke kolom bij het toevoegen van een tabel. Er moet ten minste één primaire-sleutelkolom worden opgegeven voor het maken van een nieuwe tabel. De mogelijke vervangingen voor {kolomtype} in het bovenstaande zijn: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | GEHEEL GETAL | LONG | OBJECT [NIET NULL] [TIJDELIJK] [LOCALIZABLE] [, kolom...][, ...] KOLOM PRIMAIRE SLEUTEL [, kolom][, ...].
Een tabel verwijderen DROP TABLE {table}
Een kolom toevoegen ALTER TABLE {table} ADD {column} {column type}Het kolomtype moet worden opgegeven bij het toevoegen van een kolom. De mogelijke vervangingen voor {kolomtype} in het bovenstaande zijn: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | GEHEEL GETAL | LONG | OBJECT [NIET NULL] [TIJDELIJK] [LOCALIZABLE] [BEWARING].
Tijdelijke tabellen in bewaring en gratis ALTER TABLE {table name} HOLDALTER TABLE {table name} FREE
De gebruiker kan de opdrachten HOLD en FREE gebruiken om de levensduur van een tijdelijke tabel of een tijdelijke kolom te bepalen. Het aantal bewaringen voor een tabel wordt verhoogd voor elke SQL HOLD-bewerking in die tabel en wordt afgebroken voor elke GRATIS SQL-bewerking in de tabel. Wanneer het laatste aantal bewaringen in een tabel wordt vrijgegeven, worden alle tijdelijke kolommen ontoegankelijk. Als alle kolommen tijdelijk zijn, is de tabel niet meer toegankelijk.

 

Zie Voorbeelden van databasequery's met behulp van SQL en Scriptvoor meer informatie.

SQL-grammatica

De optionele parameters worden tussen vierkante haken [ ] weergegeven. Wanneer er verschillende opties worden weergegeven, worden de optionele parameters gescheiden door een verticale balk.

Een {constant} is een tekenreeks of een geheel getal. Een tekenreeks moet tussen enkele aanhalingstekens 'voorbeeld' staan. Een {constant-list} is een door komma's gescheiden lijst met een of meer constanten.

Met de optie LOCALIZABLE wordt een kolomkenmerk ingesteld dat aangeeft dat de kolom moet worden gelokaliseerd.

Een {column} is een kolomar verwijzing naar een waarde in een veld van een tabel.

Een {marker} is een parameterreferentie naar een waarde die is opgegeven door een record die bij de query is ingediend. Deze wordt weergegeven in de SQL-instructie met een vraagteken ?. Zie de functie MsiViewExecute of de methode Execute voor meer informatie over het gebruik van parameters.

De SQL-syntaxis van Windows Installer biedt geen ondersteuning voor het ontsnappen van enkele aanhalingstekens (ASCII-waarde 39) in een letterlijke tekenreeks. U kunt de record echter ophalen of maken, het veld instellen met de eigenschap StringData of IntegerData en vervolgens de methode Modify aanroepen. U kunt ook een record maken en de parametermarkeringen (?) gebruiken die worden beschreven in methode Execute. U kunt dit ook doen met behulp van de databasefuncties MsiViewExecute, MsiRecordSetIntegeren MsiRecordSetString.

Een WHERE{operation-list}-component is optioneel en is een groepering van bewerkingen die moeten worden gebruikt om de selectie te filteren. De bewerkingen moeten van de volgende typen zijn:

  • {column} = {column}
  • {column} = | <> | > | < | >= | <= {constant}
  • {column} = | <> | > | < | >= | <= {marker}
  • {column} is null
  • {column} is niet null

Voor tekenreekswaarden zijn alleen de bewerkingen = of <> mogelijk. Vergelijkingen van objectwaarden zijn beperkt tot IS NULL en IS NOT NULL.

Afzonderlijke bewerkingen kunnen worden gegroepeerd op AND- of OR-operators. Bestellen kan worden opgelegd door gebruik van haakjes ( ).

De ORDER BY-component is optioneel en veroorzaakt een initiële vertraging tijdens het sorteren. Rangschikken op tekenreeksen groepeert identieke tekenreeksen, maar de tekenreeksen worden niet alfabetisch gealfaald.

De DISTINCT-component is optioneel en herhaalt geen identieke records in de geretourneerde resultatenset.

Een {table-list} is een door komma's gescheiden lijst met een of meer tabelnamen die in de join {table} worden genoemd.

Een {column-list} is een door komma's gescheiden lijst met een of meer tabelkolommen die {column} zijn geselecteerd. Dubbelzinnige kolommen kunnen verder worden gekwalificeerd als {tablename.column}. Een sterretje kan worden gebruikt als een kolomlijst in een SELECT-query om alle kolommen in de tabellen waarnaar wordt verwezen weer te geven. Wanneer u naar velden verwijst op kolompositie, selecteert u de kolommen op naam in plaats van het sterretje. Een sterretje kan niet worden gebruikt als een kolomlijst in een INSERT INTO-query.

Als u wilt ontsnappen aan tabelnamen en kolomnamen die conflicteren met SQL-trefwoorden, plaatst u de naam tussen twee grave accentmarkeringen '' (ASCII-waarde 96). Als een kolomnaam moet worden escaped en gekwalificeerd is als {tablename.column}, moeten de tabel en de kolom afzonderlijk worden ge escaped als {'tablename'.'column'}. Het wordt aanbevolen dat alle tabelnamen en kolomnamen op deze manier worden ontsnapt om conflicten met gereserveerde woorden te voorkomen en aanzienlijke prestaties te krijgen.

Tabelnamen mogen maximaal 31 tekens bevatten. Zie Tabelnamenvoor meer informatie. Tabel- en kolomnamen zijn hoofdlettergevoelig. SQL-trefwoorden zijn niet hoofdlettergevoelig.

Het maximum aantal expressies in een WHERE-component van een SQL-query is beperkt tot 32.

Alleen inner joins worden ondersteund en worden opgegeven door een vergelijking van kolommen uit verschillende tabellen. Circulaire joins worden niet ondersteund. Een circular join is een SQL-query waarmee drie of meer tabellen worden gekoppeld aan een circuit. Het volgende is bijvoorbeeld een circulaire join:

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

Kolommen die deel uitmaken van de primaire sleutel(en) voor een tabel, moeten eerst in volgorde van prioriteit worden gedefinieerd, gevolgd door eventuele niet-primaire sleutelkolommen. Permanente kolommen moeten worden gedefinieerd vóór tijdelijke kolommen. De sorteervolgorde van een tekstkolom is niet gedefinieerd; Identieke tekstwaarden worden echter altijd gegroepeerd.

Houd er rekening mee dat u bij het toevoegen of maken van een kolom het kolomtype moet opgeven.

Tabellen mogen niet meer dan één kolom van het type Object bevatten.

De maximale grootte die expliciet kan worden opgegeven voor een tekenreekskolom in een SQL-query is 255. Een tekenreekskolom met oneindige lengte wordt weergegeven als grootte 0. Zie kolomdefinitieindelingvoor meer informatie.

Als u een SQL-instructie wilt uitvoeren, moet er een weergave worden gemaakt. Een weergave die geen resultatenset maakt, zoals CREATE TABLE of INSERT INTO, kan echter niet worden gebruikt met MsiViewModify- of de methode Wijzigen om tabellen in de weergave bij te werken.

Houd er rekening mee dat u geen record met binaire gegevens uit één database kunt ophalen en deze record vervolgens kunt gebruiken om de gegevens in een volledig andere database in te voegen. Als u binaire gegevens van de ene database naar de andere wilt verplaatsen, moet u de gegevens exporteren naar een bestand en deze vervolgens importeren in de nieuwe database via een query en de MsiRecordSetStream--functie. Dit zorgt ervoor dat elke database een eigen kopie van de binaire gegevens heeft.