Freigeben über


SQL-Syntax

Die SQL-Abfragezeichenfolgen für Windows Installer sind auf die folgenden Formate beschränkt.

Aktion Frage
Auswählen einer Gruppe von Datensätzen SELECT [DISTINCT]{column-list} FROM {table-list} [WHERE {operation-list}] [ORDER BY {column-list}]
Löschen von Datensätzen aus einer Tabelle DELETE FROM {table} [WHERE {operation-list}]
Ändern vorhandener Datensätze in einer Tabelle UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}]UPDATE-Abfragen funktionieren nur für nichtprimäre Schlüsselspalten.
Hinzufügen von Datensätzen zu einer Tabelle INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]Binary data cannot be insert into an table directly using the INSERT INTO or UPDATE SQL queries. Weitere Informationen finden Sie unter Hinzufügen von Binärdaten zu einer Tabelle mit SQL-.
Hinzufügen einer Tabelle CREATE TABLE {table} ( {column} {column type}) [HOLD]Column types must be specified for each column when adding a table. Mindestens eine Primärschlüsselspalte muss für die Erstellung einer neuen Tabelle angegeben werden. Mögliche Ersetzungen für {Spaltentyp} in der obigen Version sind: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | GANZE ZAHL | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [, column...][, ...] PRIMÄRSCHLÜSSELspalte [, Spalte][, ...].
Entfernen einer Tabelle DROP TABLE {table}
Hinzufügen einer Spalte ALTER TABLE {table} ADD {column} {column} {column type}Der Spaltentyp muss beim Hinzufügen einer Spalte angegeben werden. Mögliche Ersetzungen für {Spaltentyp} in der obigen Version sind: CHAR [( {size} )] | CHARACTER [( {size} )] | LONGCHAR | SHORT | INT | GANZE ZAHL | LONG | OBJECT [NOT NULL] [TEMPORARY] [LOCALIZABLE] [HOLD].
Temporäre Tabellen halten und freigeben ALTER TABLE {Tabellenname} HOLDALTER TABLE {Tabellenname} KOSTENLOS
Der Benutzer kann die Befehle HOLD und FREE verwenden, um die Lebensdauer einer temporären Tabelle oder einer temporären Spalte zu steuern. Die Aufbewahrungsanzahl für eine Tabelle wird für jeden SQL HOLD-Vorgang in dieser Tabelle erhöht und für jeden SQL FREE-Vorgang in der Tabelle erhöht. Wenn die letzte Aufbewahrungsanzahl für eine Tabelle freigegeben wird, können auf alle temporären Spalten nicht zugegriffen werden. Wenn alle Spalten temporär sind, kann auf die Tabelle nicht zugegriffen werden.

 

Weitere Informationen finden Sie unter Beispiele für Datenbankabfragen mit SQL- und Script-.

SQL-Grammatik

Die optionalen Parameter werden in eckige Klammern [ ] eingeschlossen. Wenn mehrere Auswahlmöglichkeiten aufgelistet werden, werden die optionalen Parameter durch einen vertikalen Balken getrennt.

Eine {konstante} ist entweder eine Zeichenfolge oder eine ganze Zahl. Eine Zeichenfolge muss in einfache Anführungszeichen "example" eingeschlossen werden. Eine {constant-list} ist eine durch Trennzeichen getrennte Liste einer oder mehrerer Konstanten.

Die OPTION LOCALIZABLE legt ein Spaltenattribute fest, das angibt, dass die Spalte lokalisiert werden muss.

Eine {column} ist ein spaltenarer Bezug auf einen Wert in einem Feld einer Tabelle.

Ein {marker} ist ein Parameterverweis auf einen Wert, der von einem Datensatz bereitgestellt wird, der mit der Abfrage übermittelt wurde. Sie wird in der SQL-Anweisung durch ein Fragezeichen ?dargestellt. Informationen zur Verwendung von Parametern finden Sie entweder in der MsiViewExecute--Funktion oder der Execute-Methode.

Die SQL-Syntax von Windows Installer unterstützt das Escapen einzelner Anführungszeichen (ASCII-Wert 39) in einem Zeichenfolgenliteral nicht. Sie können den Datensatz jedoch abrufen oder erstellen, das Feld mit dem StringData- oder IntegerData--Eigenschaft festlegen und dann die Modify-Methode aufrufen. Alternativ können Sie einen Datensatz erstellen und die parametermarkierungen (?) verwenden, die in Execute-Methode beschrieben sind. Sie können dies auch mithilfe der Datenbankfunktionen MsiViewExecute, MsiRecordSetIntegerund MsiRecordSetString-.

Eine WHERE {operation-list}-Klausel ist optional und eine Gruppierung von Vorgängen, die zum Filtern der Auswahl verwendet werden sollen. Die Vorgänge müssen die folgenden Typen aufweisen:

  • {column} = {column}
  • {column} = | <> | > | < | >= | <= {constant}
  • {column} = | <> | > | < | >= | <= {marker}
  • {column} ist null.
  • {column} ist nicht NULL.

Bei Zeichenfolgenwerten sind nur die Operationen = oder <> möglich. Objektwertvergleiche sind auf IS NULL und IS NOT NULL beschränkt.

Einzelne Vorgänge können nach AND- oder OR-Operatoren gruppiert werden. Die Sortierung kann durch Verwendung von Klammern ( ) auferlegt werden.

Die ORDER BY-Klausel ist optional und verursacht während der Sortierung eine anfängliche Verzögerung. Die Sortierung nach Zeichenfolgen gruppiert identische Zeichenfolgen zusammen, die Zeichenfolgen werden jedoch nicht alphabetisch sortiert.

Die DISTINCT-Klausel ist optional und wiederholt keine identischen Datensätze im zurückgegebenen Resultset.

Eine {table-list} ist eine durch Trennzeichen getrennte Liste mit mindestens einem Tabellennamen, der in der Verknüpfung als {table} bezeichnet wird.

Eine {column-list} ist eine durch Trennzeichen getrennte Liste einer oder mehrerer Tabellenspalten, die als {column} bezeichnet werden. Mehrdeutige Spalten können als {tablename.column} weiter qualifiziert werden. Ein Sternchen kann als Spaltenliste in einer SELECT-Abfrage verwendet werden, um alle Spalten in den referenzierten Tabellen darzustellen. Wenn Sie auf Felder nach Spaltenposition verweisen, wählen Sie die Spalten anhand des Namens aus, anstatt das Sternchen zu verwenden. Ein Sternchen kann nicht als Spaltenliste in einer INSERT INTO-Abfrage verwendet werden.

Um Tabellennamen und Spaltennamen zu escapen, die mit SQL-Schlüsselwörtern kollidieren, schließen Sie den Namen zwischen zwei Graviszeichen "" ein (ASCII-Wert 96). Wenn ein Spaltenname escaped sein muss und als {tablename.column} qualifiziert ist, muss die Tabelle und die Spalte einzeln als {'Tablename'.'column'} escapen. Es wird empfohlen, alle Tabellennamen und Spaltennamen in dieser Weise zu vermeiden, um Konflikte mit reservierten Wörtern zu vermeiden und erhebliche Leistung zu erzielen.

Tabellennamen sind auf 31 Zeichen beschränkt. Weitere Informationen finden Sie unter Tabellennamen. Bei Tabellen- und Spaltennamen wird die Groß-/Kleinschreibung beachtet. BEI SQL-Schlüsselwörtern wird die Groß-/Kleinschreibung nicht beachtet.

Die maximale Anzahl von Ausdrücken in einer WHERE-Klausel einer SQL-Abfrage ist auf 32 beschränkt.

Es werden nur innere Verknüpfungen unterstützt und durch einen Vergleich von Spalten aus verschiedenen Tabellen angegeben. Zirkelverknungen werden nicht unterstützt. Eine Zirkelverknüpfung ist eine SQL-Abfrage, die drei oder mehr Tabellen mit einem Schaltkreis verknüpft. Dies ist beispielsweise eine Zirkelverknnung:

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

Spalten, die Teil des Primärschlüssels für eine Tabelle sind, müssen zuerst in der Prioritätsreihenfolge definiert werden, gefolgt von allen nichtprimären Schlüsselspalten. Beständige Spalten müssen vor temporären Spalten definiert werden. Die Sortierreihenfolge einer Textspalte ist nicht definiert; Identische Textwerte gruppieren jedoch immer zusammen.

Beachten Sie, dass Sie beim Hinzufügen oder Erstellen einer Spalte den Spaltentyp angeben müssen.

Tabellen dürfen nicht mehr als eine Spalte vom Typ "Object" enthalten.

Die maximale Größe, die für eine Zeichenfolgenspalte in einer SQL-Abfrage explizit angegeben werden kann, beträgt 255. Eine Zeichenfolgenspalte mit unendlicher Länge wird als Größe 0 dargestellt. Weitere Informationen finden Sie unter Spaltendefinitionsformat.

Zum Ausführen einer SQL-Anweisung muss eine Ansicht erstellt werden. Eine Ansicht, die kein Resultset erstellt, z. B. CREATE TABLE oder INSERT INTO, kann jedoch nicht mit MsiViewModify oder der Modify-Methode verwendet werden, um Tabellen in der Ansicht zu aktualisieren.

Beachten Sie, dass Sie keinen Datensatz abrufen können, der Binärdaten aus einer Datenbank enthält, und dann diesen Datensatz verwenden, um die Daten in eine völlig andere Datenbank einzufügen. Um Binärdaten aus einer Datenbank in eine andere zu verschieben, sollten Sie die Daten in eine Datei exportieren und dann in die neue Datenbank über eine Abfrage und die MsiRecordSetStream-Funktion importieren. Dadurch wird sichergestellt, dass jede Datenbank über eine eigene Kopie der Binärdaten verfügt.