Składnia SQL
Ciągi zapytań SQL dla Instalatora Windows są ograniczone do następujących formatów.
Akcja | Zapytanie |
---|---|
Wybierz grupę rekordów | SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}] |
Usuwanie rekordów z tabeli | DELETE FROM {table} [WHERE {operation-list}] |
Modyfikowanie istniejących rekordów w tabeli | UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]Zapytania UPDATE działają tylko w kolumnach kluczy innych niżprimary. |
Dodawanie rekordów do tabeli | INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Binary data nie można wstawić do tabeli bezpośrednio przy użyciu zapytań INSERT INTO lub UPDATE SQL. Aby uzyskać więcej informacji, zobacz Dodawanie danych binarnych do tabeli przy użyciuSQL . |
Dodawanie tabeli | CREATE TABLE {table} ( {column} {column} {column type}) [HOLD]Typy kolumn muszą być określone dla każdej kolumny podczas dodawania tabeli. Aby utworzyć nową tabelę, należy określić co najmniej jedną kolumnę klucza podstawowego. Możliwe podstawianie dla {typu kolumny} w powyższych elementach to: CHAR [( {size} )] | ZNAK [( {size} )] | LONGCHAR | SHORT | INT | Liczba CAŁKOWITA | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...][, ...] KOLUMNA KLUCZ PODSTAWOWY [, kolumna][, ...]. |
Usuwanie tabeli | DROP TABLE {table} |
Dodawanie kolumny | ALTER TABLE {table} ADD {column} {column type}Typ kolumny należy określić podczas dodawania kolumny. Możliwe podstawianie dla {typu kolumny} w powyższych elementach to: CHAR [( {size} )] | ZNAK [( {size} )] | LONGCHAR | SHORT | INT | Liczba CAŁKOWITA | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD]. |
Przytrzymaj i zwolnij tabele tymczasowe | ALTER TABLE {nazwa tabeli} HOLDALTER TABLE {nazwa tabeli} BEZPŁATNIE Użytkownik może użyć poleceń HOLD i FREE, aby kontrolować okres życia tabeli tymczasowej lub kolumny tymczasowej. Liczba blokad w tabeli jest zwiększana dla każdej operacji HOLD SQL w tej tabeli i dekrementowana dla każdej operacji SQL FREE w tabeli. Gdy ostatnia liczba blokad zostanie zwolniona w tabeli, wszystkie kolumny tymczasowe staną się niedostępne. Jeśli wszystkie kolumny są tymczasowe, tabela stanie się niedostępna. |
Aby uzyskać więcej informacji, zobacz Przykłady zapytań bazy danych przy użyciu języka SQL i skryptu.
Gramatyka SQL
Parametry opcjonalne są wyświetlane w nawiasach kwadratowych [ ]. Gdy zostanie wyświetlonych kilka opcji, parametry opcjonalne są oddzielone pionowym paskiem.
{stała} jest ciągiem lub liczbą całkowitą. Ciąg musi być ujęta w znaki pojedynczego cudzysłowu "example". {constant-list} to rozdzielana przecinkami lista co najmniej jednej stałej.
Opcja LOCALIZABLE ustawia atrybut kolumny, który wskazuje, że kolumna musi być zlokalizowana.
{column} to odwołanie kolumnowe do wartości w polu tabeli.
{marker} to odwołanie parametru do wartości dostarczonej przez rekord przesłany z zapytaniem. Jest reprezentowana w instrukcji SQL za pomocą znaku zapytania ?. Aby uzyskać informacje dotyczące używania parametrów, zobacz funkcję MsiViewExecute lub metodę Execute.
Składnia SQL Instalatora Windows nie obsługuje ucieczki pojedynczych cudzysłowów (wartość ASCII 39) w literału ciągu. Można jednak pobrać lub utworzyć rekord, ustawić pole przy użyciu StringData lub właściwości IntegerData, a następnie wywołać metodę Modify. Alternatywnie możesz utworzyć rekord i użyć znaczników parametrów (?) opisanych w metoda Execute. Można to również zrobić przy użyciu funkcji bazy danych MsiViewExecute, MsiRecordSetIntegeri MsiRecordSetString.
Klauzula WHERE {operation-list} jest opcjonalna i jest grupowaniem operacji, które mają być używane do filtrowania zaznaczenia. Operacje muszą mieć następujące typy:
- {column} = {column}
- {column} = | <> | > | < | >= | <= {constant}
- {column} = | <> | > | < | >= | <= {marker}
- Wartość {column} ma wartość null
- Kolumna {column} nie ma wartości null
W przypadku wartości ciągu możliwe są tylko operacje = lub <>. Porównania wartości obiektów są ograniczone do wartości NULL IS i NIE MA WARTOŚCI NULL.
Poszczególne operacje można grupować według operatorów AND lub OR. Kolejność można narzucić przy użyciu nawiasów ( ).
Klauzula ORDER BY jest opcjonalna i powoduje początkowe opóźnienie podczas sortowania. Kolejność według ciągów grupuje identyczne ciągi, ale nie będzie alfabetyzować ciągów.
Klauzula DISTINCT jest opcjonalna i nie powtarza identycznych rekordów w zwracanym zestawie wyników.
{table-list} jest rozdzielaną przecinkami listą co najmniej jednej nazwy tabeli nazywanej {table} w sprzężeniu.
{column-list} to rozdzielana przecinkami lista co najmniej jednej kolumny tabeli nazywanej wybraną kolumną {column}. Niejednoznaczne kolumny mogą być dodatkowo kwalifikowane jako {tablename.column}. Gwiazdka może być używana jako lista-kolumn w zapytaniu SELECT, aby reprezentować wszystkie kolumny w tabelach, do których odwołuje się odwołanie. Podczas odwoływania się do pól według położenia kolumny wybierz kolumny według nazwy zamiast używać gwiazdki. Gwiazdka nie może być używana jako lista-kolumn w zapytaniu INSERT INTO.
Aby uniknąć nazw tabel i nazw kolumn, które starją się ze słowami kluczowymi SQL, należy ująć nazwę między dwoma poważnymi znakami wyróżniającymi "" (wartość ASCII 96). Jeśli nazwa kolumny musi zostać uniknięta i jest kwalifikowana jako {tablename.column}, tabela i kolumna muszą zostać unikniętą indywidualnie jako {'nazwa_tabeli'.'kolumna'}. Zaleca się, aby wszystkie nazwy tabel i nazwy kolumn nie ulegały w ten sposób, aby uniknąć starć z zastrzeżonymi słowami i uzyskać znaczącą wydajność.
Nazwy tabel są ograniczone do 31 znaków. Aby uzyskać więcej informacji, zobacz Nazwy tabel. W nazwach tabel i kolumn jest rozróżniana wielkość liter. Słowa kluczowe SQL nie są uwzględniane wielkości liter.
Maksymalna liczba wyrażeń w klauzuli WHERE zapytania SQL jest ograniczona do 32.
Obsługiwane są tylko sprzężenia wewnętrzne i są określane przez porównanie kolumn z różnych tabel. Sprzężenia cykliczne nie są obsługiwane. Sprzężenia cykliczne to zapytanie SQL, które łączy trzy lub więcej tabel ze sobą w obwód. Na przykład następujące sprzężenia cykliczne:
WHERE Table1.Field1=Table2.Field1 AND Table2.Field2=Table3.Field1 AND Table3.Field2=Table1.Field2.
Kolumny, które są częścią kluczy podstawowych dla tabeli, muszą być zdefiniowane najpierw w kolejności priorytetu, a następnie wszystkie kolumny kluczy innych niżprimary. Kolumny trwałe muszą być zdefiniowane przed kolumnami tymczasowymi. Sekwencja sortowania kolumny tekstowej jest niezdefiniowana; jednak identyczne wartości tekstowe zawsze grupują się razem.
Należy pamiętać, że podczas dodawania lub tworzenia kolumny należy określić typ kolumny.
Tabele nie mogą zawierać więcej niż jednej kolumny typu "object".
Maksymalny rozmiar, który można jawnie określić dla kolumny ciągu w zapytaniu SQL, wynosi 255. Kolumna ciągu o nieskończonej długości jest reprezentowana jako o rozmiarze 0. Aby uzyskać więcej informacji, zobacz Format definicji kolumny.
Aby wykonać dowolną instrukcję SQL, należy utworzyć widok. Jednak widok, który nie tworzy zestawu wyników, takiego jak CREATE TABLE lub INSERT INTO, nie może być używany z MsiViewModify lub metody Modify, aby zaktualizować tabele mimo widoku.
Pamiętaj, że nie można pobrać rekordu zawierającego dane binarne z jednej bazy danych, a następnie użyć tego rekordu do wstawienia danych do zupełnie innej bazy danych. Aby przenieść dane binarne z jednej bazy danych do innej, należy wyeksportować dane do pliku, a następnie zaimportować je do nowej bazy danych za pomocą zapytania i MsiRecordSetStream funkcji. Dzięki temu każda baza danych ma własną kopię danych binarnych.