Szenario Man möchte mit dem iSQL (einem interaktiven SQL-Abfragewerkzeug) Daten aus einer SQL Anywhere-Datenbank abfragen. Das Abfrageergebnis soll in eine CSV-Datei exportiert werden.

Problem Der iSQL-Client unterstützt prinzipiell den Export in kommaseparierte Dateien. Allerdings werden dabei nur die reinen Ergebniszeilen exportiert; die Feldnamen, die typischerweise in der ersten Zeile stehen, fehlen.

Vorgehen

Man führt zwei Abfragen nacheinander durch. Beide exportiert man in die gleiche Datei. In der ersten Abfrage exportiert man die Feldnamen, in der zweiten die eigentlichen Daten.

Wichtig ist dabei, dass das zweite OUTPUT-Statement die Option APPEND mitbekommt - dadurch wird der zweite OUTPUT an den bisherigen Inhalt der Ergebnisdatei (hier: ergebnis.csv) angehängt.

Beispiel

SELECT 'Nachname', 'Vorname', 'PLZ', 'Ort'
FROM dummy;
OUTPUT TO 'C:\Temp\ergebnis.csv' FORMAT ASCII
    DELIMITED BY ';' QUOTE '';

SELECT a.nachname,
       a.vorname,
       a.plz,
       a.ort
FROM   adressen AS a;
OUTPUT TO 'C:\Temp\ergebnis.csv' FORMAT ASCII
    DELIMITED BY ';' QUOTE '' APPEND;

Alternative: SELECT mit UNION

Alternativ zum doppelten Export in die gleiche Datei kann man auch bereits das SELECT-Statement so umschreiben, dass die Spaltennamen gleich in der ersten Zeile mitgeliefert werden. Zwei (oder mehr) SELECTs können mit Hilfe des UNION-Operators verbunden werden, solange sie die gleiche Struktur aufweisen!

SELECT 'Nachname', 'Vorname', 'PLZ', 'Ort'
FROM dummy

UNION

SELECT a.nachname,
       a.vorname,
       a.plz,
       a.ort
FROM   adressen AS a;
OUTPUT TO 'C:\Temp\ergebnis.csv' FORMAT ASCII
    DELIMITED BY ';' QUOTE '';

Das erste OUTPUT-Statement fällt weg, weil beide SELECTs durch den UNION-Operator zu einer Abfrage zusammengeführt werden. Zu beachten ist außerdem, dass nach dem ersten SELECT kein Semikolon kommt, da die (gesamte) Abfrage eben erst nach dem zweiten SELECT endet. Das OUTPUT-Statement benötigt zudem jetzt auch nicht mehr den APPEND-Operator.