SQL-syntax
SQL-frågesträngarna för Windows Installer är begränsade till följande format.
Handling | Fråga |
---|---|
Välj en grupp med poster | SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}] |
Ta bort poster från en tabell | TA BORT FRÅN {table} [WHERE {operation-list}] |
Ändra befintliga poster i en tabell | UPPDATERA {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]UPDATE-frågor fungerar bara på icke-primariska nyckelkolumner. |
Lägga till poster i en tabell | INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Binary data kan inte infogas i en tabell direkt med HJÄLP av SQL-frågorna INSERT INTO eller UPDATE. Mer information finns i Lägga till binära data i en tabell med SQL. |
Lägga till en tabell | CREATE TABLE {table} ( {column} {column type}) [HOLD]Kolumntyper måste anges för varje kolumn när du lägger till en tabell. Minst en primärnyckelkolumn måste anges för att skapa en ny tabell. Möjliga ersättningar för {kolumntyp} i ovanstående är: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | KORT | INT | HELTAL | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...][, ...] PRIMÄRNYCKELkolumn [, kolumn][, ...]. |
Ta bort en tabell | DROP TABLE {table} |
Lägga till en kolumn | ALTER TABLE {table} ADD {column} {column type}Kolumntypen måste anges när du lägger till en kolumn. Möjliga ersättningar för {kolumntyp} i ovanstående är: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | KORT | INT | HELTAL | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD]. |
Undantag och kostnadsfria temporära tabeller | ALTER TABLE {table name} HOLDALTER TABLE {table name} FREE Användaren kan använda kommandona HOLD och FREE för att styra livslängden för en tillfällig tabell eller en tillfällig kolumn. Antalet undantag för en tabell ökas för varje SQL HOLD-åtgärd i tabellen och minskas för varje SQL FREE-åtgärd i tabellen. När det sista undantagsantalet släpps i en tabell blir alla temporära kolumner otillgängliga. Om alla kolumner är tillfälliga blir tabellen otillgänglig. |
Mer information finns i Exempel på databasfrågor med SQL och skript.
SQL-grammatik
De valfria parametrarna visas inom hakparenteser [ ]. När flera alternativ visas avgränsas de valfria parametrarna med en lodrät stapel.
En {constant} är antingen en sträng eller ett heltal. En sträng måste omges av enkla citattecken som "exempel". En {constant-list} är en kommaavgränsad lista över en eller flera konstanter.
Alternativet LOCALIZABLE anger ett kolumnattribut som anger att kolumnen måste lokaliseras.
En {column} är en kolumnreferens till ett värde i ett fält i en tabell.
En {marker} är en parameterreferens till ett värde som tillhandahålls av en post som skickats med frågan. Det representeras i SQL-instruktionen av ett frågetecken ?. Information om hur du använder parametrar finns i antingen funktionen MsiViewExecute eller metoden Execute.
SQL-syntaxen för Windows Installer stöder inte att enkla citattecken (ASCII-värde 39) kan komma från i en strängliteral. Du kan dock hämta eller skapa posten, ange fältet med egenskapen StringData eller IntegerData och sedan anropa metoden Ändra. Du kan också skapa en post och använda parametermarkörerna (?) som beskrivs i Kör-metoden. Du kan också göra detta med hjälp av databasfunktionerna MsiViewExecute, MsiRecordSetIntegeroch MsiRecordSetString.
En WHERE{operation-list}-sats är valfri och är en gruppering av åtgärder som ska användas för att filtrera markeringen. Åtgärderna måste vara av följande typer:
- {column} = {column}
- {column} = | <> | > | < | >= | <= {constant}
- {column} = | <> | > | < | >= | <= {marker}
- {column} är null
- {column} är inte null
För strängvärden är endast åtgärderna = eller <> möjliga. Objektvärdesjämförelser är begränsade till IS NULL och IS NOT NULL.
Enskilda åtgärder kan grupperas efter AND- eller OR-operatorer. Beställning kan införas med parenteser ( ).
ORDER BY-satsen är valfri och orsakar en inledande fördröjning under sortering. Om du beställer efter strängar grupperas identiska strängar, men strängarna alfabetiseras inte.
DISTINCT-satsen är valfri och upprepar inte identiska poster i den returnerade resultatuppsättningen.
En {table-list} är en kommaavgränsad lista med ett eller flera tabellnamn som kallas {table} i kopplingen.
En {column-list} är en kommaavgränsad lista över en eller flera tabellkolumner som kallas {column} markerade. Tvetydiga kolumner kan ytterligare kvalificeras som {tablename.column}. En asterisk kan användas som en kolumnlista i en SELECT-fråga för att representera alla kolumner i de refererade tabellerna. När du refererar till fält efter kolumnposition väljer du kolumnerna efter namn i stället för att använda asterisken. En asterisk kan inte användas som en kolumnlista i en INSERT INTO-fråga.
Om du vill undvika tabellnamn och kolumnnamn som kolliderar med SQL-nyckelord omger du namnet mellan två allvarliga accenttecken (ASCII-värde 96). Om ett kolumnnamn måste undantagas och är kvalificerat som {tablename.column}, måste tabellen och kolumnen undantagas individuellt som {'tablename'.'column'}. Vi rekommenderar att alla tabellnamn och kolumnnamn undviks på det här sättet för att undvika konflikter med reserverade ord och få betydande prestanda.
Tabellnamn är begränsade till 31 tecken. Mer information finns i tabellnamn. Tabell- och kolumnnamn är skiftlägeskänsliga. SQL-nyckelord är inte skiftlägeskänsliga.
Det maximala antalet uttryck i en WHERE-sats för en SQL-fråga är begränsat till 32.
Endast inre kopplingar stöds och anges genom en jämförelse av kolumner från olika tabeller. Cirkulära kopplingar stöds inte. En cirkulär koppling är en SQL-fråga som länkar samman tre eller flera tabeller till en krets. Följande är till exempel en cirkulär koppling:
WHERE Table1.Field1=Table2.Field1 AND Table2.Field2=Table3.Field1 AND Table3.Field2=Table1.Field2.
Kolumner som är en del av primärnyckeln för en tabell måste definieras först i prioritetsordning, följt av eventuella icke-primariska nyckelkolumner. Beständiga kolumner måste definieras före tillfälliga kolumner. Sorteringssekvensen för en textkolumn är odefinierad. Identiska textvärden grupperas dock alltid tillsammans.
Observera att när du lägger till eller skapar en kolumn måste du ange kolumntypen.
Tabeller får inte innehålla mer än en kolumn av typen "objekt".
Den maximala storleken som uttryckligen kan anges för en strängkolumn i en SQL-fråga är 255. En strängkolumn med oändlig längd representeras med storlek 0. Mer information finns i Kolumndefinitionsformat.
Om du vill köra en SQL-instruktion måste en vy skapas. En vy som inte skapar en resultatuppsättning, till exempel CREATE TABLE eller INSERT INTO, kan dock inte användas med MsiViewModify- eller metoden Ändra för att uppdatera tabeller i vyn.
Observera att du inte kan hämta en post som innehåller binära data från en databas och sedan använda posten för att infoga data i en helt annan databas. Om du vill flytta binära data från en databas till en annan bör du exportera data till en fil och sedan importera dem till den nya databasen via en fråga och funktionen MsiRecordSetStream. Detta säkerställer att varje databas har en egen kopia av binära data.