Syntaxe SQL
Řetězce dotazů SQL pro Instalační službu systému Windows jsou omezeny na následující formáty.
Akce | Dotaz |
---|---|
Výběr skupiny záznamů | SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}] |
Odstranění záznamů z tabulky | DELETE FROM {table} [WHERE {operation-list}] |
Úprava existujících záznamů v tabulce | AKTUALIZOVAT {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]Dotazy UPDATE fungují jenom na neprimárních klíčových sloupcích. |
Přidání záznamů do tabulky | INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Binární data nelze vložit do tabulky přímo pomocí dotazů INSERT INTO nebo UPDATE SQL. Další informace naleznete v tématu Přidání binárních dat do tabulky pomocí SQL. |
Přidání tabulky | CREATE TABLE {table} ( {column} {column type}) [HOLD]Typy sloupců musí být při přidávání tabulky zadány pro každý sloupec. Pro vytvoření nové tabulky musí být zadán alespoň jeden sloupec primárního klíče. Možné náhrady pro {typ sloupce} ve výše uvedeném příkladu jsou: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | CELÉ ČÍSLO | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...][, ...] Sloupec PRIMARY KEY [, column][, ...]. |
Odebrání tabulky | DROP TABLE {table} |
Přidání sloupce | ALTER TABLE {table} ADD {column} {column type}Typ sloupce musí být zadán při přidávání sloupce. Možné náhrady pro {typ sloupce} ve výše uvedeném příkladu jsou: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | CELÉ ČÍSLO | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD]. |
Uložení a uvolnění dočasných tabulek | ALTER TABLE {table name} HOLDALTER TABLE {table name} FREE Uživatel může pomocí příkazů HOLD a FREE řídit životnost dočasné tabulky nebo dočasného sloupce. Počet blokování tabulky se zvýší pro každou operaci SQL HOLD v této tabulce a dekrementuje se pro každou operaci SQL FREE v tabulce. Když se v tabulce uvolní poslední počet blokování, stanou se všechny dočasné sloupce nepřístupné. Pokud jsou všechny sloupce dočasné, stane se tabulka nepřístupná. |
Další informace naleznete v tématu příklady databázových dotazů pomocí sql a skript.
Gramatika SQL
Volitelné parametry jsou uvedeny v hranatých závorkách [ ]. Pokud je uvedeno několik možností, volitelné parametry jsou oddělené svislým pruhem.
{constant} je řetězec nebo celé číslo. Řetězec musí být uzavřený do jednoduchých uvozovek "example". {constant-list} je čárkami oddělený seznam jedné nebo více konstant.
Možnost LOCALIZABLE nastaví atribut sloupce, který označuje, že sloupec musí být lokalizován.
Sloupec {column} je sloupcový odkaz na hodnotu v poli tabulky.
{marker} je odkaz na parametr na hodnotu zadanou záznamem odeslaným dotazem. Je reprezentována v příkazu SQL otazníkem ?. Informace týkající se použití parametrů naleznete buď MsiViewExecute funkce, nebo Execute metoda.
Syntaxe SQL Instalační služby systému Windows nepodporuje uvozovky (hodnota ASCII 39) v řetězcovém literálu. Můžete však načíst nebo vytvořit záznam, nastavit pole pomocí StringData nebo IntegerData vlastnost a potom volat Modify metoda. Případně můžete vytvořit záznam a použít značky parametrů (?) popsané v metodě Execute. Můžete to provést také pomocí databázových funkcí MsiViewExecute, MsiRecordSetIntegera MsiRecordSetString.
Klauzule WHERE {operation-list} je volitelná a slouží k filtrování výběru seskupováním operací. Operace musí být z následujících typů:
- {column} = {column}
- {column} = | <> | > | < | >= | <= {constant}
- {column} = | <> | > | < | >= | <= {marker}
- {column} má hodnotu null.
- {column} nemá hodnotu null.
Pro řetězcové hodnoty jsou možné pouze operace = nebo <>. Porovnání hodnot objektů jsou omezena na hodnotu IS NULL a IS NOT NULL.
Jednotlivé operace můžou být seskupené operátory AND nebo OR. Řazení lze vynucovat pomocí závorek ( ).
Klauzule ORDER BY je volitelná a způsobuje počáteční zpoždění při řazení. Řazení podle řetězců seskupí identické řetězce dohromady, ale nebude se seskupit řetězce podle abecedy.
Klauzule DISTINCT je nepovinná a neopakuje stejné záznamy ve vrácené sadě výsledků.
{table-list} je čárkami oddělený seznam jednoho nebo více názvů tabulek, které se ve spojení označují jako {table}.
{column-list} je čárkami oddělený seznam jednoho nebo více sloupců tabulky, které se označují jako {column}. Nejednoznačné sloupce mohou být dále kvalifikované jako {tablename.column}. Hvězdičku lze použít jako seznam sloupců v dotazu SELECT, který představuje všechny sloupce v odkazovaných tabulkách. Při odkazování na pole podle pozice sloupce místo hvězdičky vyberte sloupce podle názvu. Hvězdičku nelze použít jako seznam sloupců v dotazu INSERT INTO.
Chcete-li uvozovat názvy tabulek a názvy sloupců, které kolidují s klíčovými slovy SQL, uzavřete název mezi dvě značky zvýraznění "" (hodnota ASCII 96). Pokud musí být název sloupce uchycený a je kvalifikovaný jako {tablename.column}, tabulka a sloupec musí být uchycené jednotlivě jako {'název_tabulky'.'column'}. Doporučujeme, aby všechny názvy tabulek a názvy sloupců byly tímto způsobem uchvácené, aby nedocházelo ke konfliktům s rezervovanými slovy a získaly významný výkon.
Názvy tabulek jsou omezené na 31 znaků. Další informace naleznete v tématu Názvy tabulek. V názvech tabulek a sloupců se rozlišují malá a velká písmena. Klíčová slova SQL nerozlišují malá a velká písmena.
Maximální počet výrazů v klauzuli WHERE dotazu SQL je omezen na 32.
Podporují se pouze vnitřní spojení a jsou určena porovnáním sloupců z různých tabulek. Kruhové spojení nejsou podporována. Kruhové spojení je dotaz SQL, který spojuje tři nebo více tabulek do okruhu. Například toto je kruhové spojení:
WHERE Table1.Field1=Table2.Field1 AND Table2.Field2=Table3.Field1 AND Table3.Field2=Table1.Field2.
Sloupce, které jsou součástí primárních klíčů pro tabulku, musí být definovány jako první v pořadí priority následované všemi neprimárními klíčovými sloupci. Trvalé sloupce musí být definovány před dočasnými sloupci. Pořadí řazení textového sloupce není definováno; stejné textové hodnoty se však vždy seskupí dohromady.
Všimněte si, že při přidávání nebo vytváření sloupce je nutné zadat typ sloupce.
Tabulky nesmí obsahovat více než jeden sloupec typu "object".
Maximální velikost, kterou lze explicitně zadat pro řetězcový sloupec v dotazu SQL, je 255. Řetězcový sloupec s neomezenou délkou je reprezentován jako sloupec s velikostí 0. Další informace naleznete v tématu formát definice sloupce.
Pokud chcete spustit jakýkoli příkaz SQL, musí se vytvořit zobrazení. Zobrazení, které nevytvoří sadu výsledků, například CREATE TABLE nebo INSERT INTO, však nelze použít s MsiViewModify nebo metodou Modify k aktualizaci tabulek v zobrazení.
Všimněte si, že nelze načíst záznam obsahující binární data z jedné databáze a pak tento záznam použít k vložení dat do zcela jiné databáze. Pokud chcete přesunout binární data z jedné databáze do jiné, měli byste data exportovat do souboru a pak je importovat do nové databáze pomocí dotazu a funkce MsiRecordSetStream. Tím zajistíte, že každá databáze má vlastní kopii binárních dat.