# Mehr → Alle SQL-Tabellen exportieren / SQL-Tabellen importieren

Dieselben beiden Schritte wie *SQL Tabelle anlegen* und *SQL Tabelle ändern*, nur für
eine **ganze Datenbank** statt für eine Tabelle. Gemeint ist der Umzug vom
Entwicklungssystem zum Kunden: dort stehen zwanzig Tabellen, hier keine davon.

## Was in der Datei steht

Die Datei beschreibt den **Aufbau** jeder Tabelle – Spalten, Typ, Länge, Stellen, NULL,
Standardwert – und **keine einzige Zeile Daten**.

> Das ist keine Sicherung. Wer Daten mitnehmen will, nimmt ein Werkzeug der Datenbank.

Sichten, Indizes, `UNIQUE`-Bedingungen, Fremdschlüssel und Trigger gehen nicht mit: was
dieser Editor nicht anlegen kann, verspricht er auch nicht. Die Typen in der Datei sind
die des Editors und nicht die einer bestimmten Datenbank – nur so lässt sich eine
MySQL- in eine MS-SQL-Datenbank spielen. Ein `TINYINT` kommt deshalb als `SMALLINT`
wieder an.

## Exportieren

Angeboten werden die Datenbanken, in denen dieser Editor Tabellen anlegen darf. Die
Workflow-Datenbank, das Repository und Squeeze stehen nicht dabei: ihr Aufbau gehört
zum Produkt, kommt aus der Auslieferung und wäre in der Datei nichts als Länge – siehe
[Geschützte Datenbanken](/books/tableservice-konfiguration-neu/page/geschutzte-datenbanken).

Gelesen wird je Verbindung ein Aufruf; zusammengesetzt wird die Datei in der Seite. Eine
Datenbank, die nicht antwortet, steht als Fehler in der Rückmeldung, die übrigen kommen
trotzdem mit.

## Importieren

Angeglichen wird in **eine Richtung**, und zwar genau in den drei Fällen, bei denen
nichts verlorengeht:

| Fall | Was geschieht |
|---|---|
| Tabelle fehlt | wird angelegt |
| Spalte fehlt | wird ergänzt |
| Zeichenspalte ist kürzer als in der Datei | wird verlängert |

**Gelöscht wird nichts.** Eine Spalte, die in der Datei fehlt, aber in der Zieltabelle
steht, bleibt stehen. Verkleinert wird nichts, und kein Typ wird umgedeutet: beides
steht als Hinweis in der Planzeile und wird nicht ausgeführt.

Der Fall, um den es vor allem geht, ist der zusammengesetzte: eine Tabelle, die seit dem
letzten Abgleich ein Feld dazubekommen hat **und** bei der eine Länge gewachsen ist,
kommt in einem Lauf nach.

### Schritt 1: Verbindungen zuordnen

Die Verbindungen aus der Datei werden denen dieser Installation zugeordnet,
voreingestellt gleicher Name. Zur Wahl stehen die Datenbanken, in denen etwas entstehen
darf. Eine Verbindung aus der Datei, zu der hier keine passt, bleibt auf *nicht
importieren*.

Die Datenbanken des Produkts stehen auch hier nicht zur Wahl. Eine Zeile, die auf eine
von ihnen zeigt, bleibt auf *nicht importieren* – siehe
[Geschützte Datenbanken](/books/tableservice-konfiguration-neu/page/geschutzte-datenbanken).

### Schritt 2: „Das würde geschehen“

`Prüfen` rechnet den Plan; dieser Schritt **liest nur**. Danach steht Tabelle für
Tabelle da, was entstünde, mit einem Haken je Zeile, der sich abwählen lässt, und mit
Hinweisen zu allem, was übergangen wird (anderer Typ, kürzere Länge, unbekannter Typ,
unbrauchbarer Spaltenname, Sicht statt Tabelle, geschützte Datenbank).

Jede neu angelegte Tabelle bekommt auch hier `ID` und `Licence` vorangestellt.

Erst `Importieren` schreibt – über dieselben Schritte wie *SQL Tabelle anlegen* und
*SQL Tabelle ändern*, und damit unter denselben Grenzen.

### Danach

Eine neue Spalte ist erst zu gebrauchen, wenn eine Definition sie kennt. Der
Reiter [Spalten](/books/tableservice-konfiguration-neu/page/reiter-spalten) nimmt sie über **+ aus Tabelle …** in die
passende Definition auf.