SQL Server: Datenbanken per Skript kopieren

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

SQL Server: Datenbanken per Skript kopieren

Die Beispieldatenbanken auf Basis des SQL Servers sollen Sie schnell und unkompliziert auf Ihrem System nutzbar machen können. Leider geht das nicht immer so einfach – zum Beispiel, weil verschiedene Versionen des SQL Servers uns einen Strich durch die Rechnung machen. Also stellen wir in diesem Artikel eine einfache Lösung vor, wie Sie die Beispieldatenbanken nach dem Download schnell nutzen können – nämlich indem wir diese als Skript bereitstellen, das die komplette Definition der Datenbank sowie die enthaltenen Daten anlegt.

Für die Nutzung der Beispieldatenbanken verwenden Sie optimalerweise neben Ihrer SQL Server-Installation, bei der es sich auch um die einfache LocalDB-Variante handeln kann, noch das kostenlos verfügbar SQL Server Management Studio.

Wenn ich die Beispieldatenbank für den Download vorbereite, habe ich diese bereits im SQL Server Management Studio eingebunden – in diesem Beispiel in der Version 2014. Hier kann ich dann im Objekt-Explorer unter Datenbanken die gewünschte Datenbank auswählen (hier Bestellverwaltung), das Kontextmenü anzeigen und dort den Befehl Tasks|Skripts generieren... ausführen (siehe Bild 1).

Skript-Assistent starten

Dies öffnet den Dialog aus Bild 2. Hier können Sie entweder die Option Skripterstellung für gesamte Datenbank und alle Datenbankobjekte beibehalten oder auf Bestimmte Datenbankobjekte auswählen wechseln und hier eine individuelle Auswahl festlegen. Bei unserer begrenzten Menge von Datenbankobjekten sind beide Methoden gleich schnell ausgeführt. Aber es gibt einen entscheidenden Unterschied:

Wenn Sie Bestimmte Datenbankobjekte auswählen selektieren, werden, selbst wenn Sie dann alle Elemente selektieren, nur die CREATE TABLE-Statements für die einzelnen Tabellen (beziehungsweise CREATE...-Anweisungen für die übrigen Objekttypen) erstellt, aber kein CREATE DATABASE – Sie können mit dem erstellten Skript dann keine neue Datenbank generieren, sondern lediglich die Datenbankobjekte in eine bestehende Datenbank eintragen.

Wenn Sie eine komplett neue Datenbank erstellen wollen, wählen Sie die Option Skripterstellung für gesamte Datenbank und alle Datenbankobjekte.

Einen Dialogschritt weiter unter Skripterstellungsoptionen festlegen finden Sie die Optionen aus Bild 3. Hier legen Sie zunächst als Ausgabetyp die Option Skripts an einem bestimmten Speicherort speichern aus. Darunter finden Sie reichlich Möglichkeiten, um das Ziel des Exports zu definieren.

Die erste Option geht davon aus, dass Sie die Definition aller Elemente in einer einzelnen Datei speichern wollen. Dazu geben Sie dann den gewünschten Dateinamen an und ob eventuell bereits vorhandene Dateien gleichen Namens überschrieben werden sollen. Außerdem stellen Sie hier das Exportformat fest und wählen dabei zwischen Unicode-Text und ANSI-Text.

Vielleicht wollen Sie aber gar keine Datei anlegen, sondern sich das Skript erst einmal ansehen oder es in die Zwischen­ablage speichern? Beides ist kein Problem, wenn Sie die zweite Option In Zwischenablage speichern oder die dritte Option In neuem Abfragefenster speichern selektieren.

Wir wählen letztere Version, um uns das Ergebnis zunächst anzusehen. Der Assistent liefert uns zur Unterstützung einen Bericht mit den Ergebnissen der Skripterstellung (siehe Bild 4).

Ergebnis ansehen

Nach dem Schließen des Assistenten können Sie zum SQL Server Management Studio zurückwechseln und finden dort ein neues Abfragefenster wie in Bild 5 vor. Das sieht schon recht gut aus – das Skript liefert die SQL-Anweisungen zum Erstellen der Tabellen unserer Datenbank. Wenn wir jedoch ein wenig weiter nach unten scrollen, stellen wir fest, dass dies leider alles ist: Neben ein paar weiteren Anweisungen zum Ändern einiger Felder in Fremdschlüsselfelder folgen keine weiteren Befehle. Damit erstellt das Skript zwar die gewünschte Tabellenstruktur, füllt die Tabellen aber nicht mit den Daten der in das Skript exportierten Datenbank. Außerdem fällt auf, dass man auch die Datenbank noch selbst anlegen muss – die erste Anweisung des Skripts lautet USE [Bestellverwaltung] statt CREATE DATABASE [Bestellverwaltung]. Eine bestehende Datenbank dieses Namens ist also Voraussetzung für das Funktionieren des Skripts.

Anpassen der »Weiteren Einstellungen«

Doch wir haben noch nicht alle Möglichkeiten des Skript-Assistenten genutzt, denn wir haben die Schaltfläche Erweitert im Schritt Skripterstellungsoptionen festlegen ignoriert.

Wenn wir den Vorgang nochmal starten und in diesem Schritt die erweiterten Optionen anzeigen lassen, erhalten wir den Dialog aus Bild 6. Hier finden Sie nun eine ganze Reihe Optionen, mit denen Sie das Aussehen des Exports sehr fein einstellen können. Für uns sind hier die folgenden Optionen interessant:

Datentypen, für die ein Skript erstellt wird: Legt fest, ob Sie nur die Daten, nur das Schema oder Schema und Daten exportieren wollen. Wir benötigen in diesem Fall Schema und Daten.

DROP und CREATE als Skript: Dies legt fest, ob zu jedem zu berücksichtigenden Datenbankobjekt eine DROP-Anweisung (zum Löschen), eine CREATE-Anweisung (zum Erstellen) oder beide angelegt werden sollen. Wir benötigen auf jeden Fall die CREATE-Anweisungen. Wenn Sie die Datenbankobjekte in eine bestehende Datenbank importieren wollen, die bereits Datenbankobjekte gleichen Namens enthält, sollten Sie zusätzlich die DROP-Anweisungen hinzufügen. Sie können auch ein Skript erstellen, das lediglich Datenbankobjekte löscht!

Mit Skripterstellung für Serverversion können Sie eine Zielversion angeben. Hier sind sie aus verständlichen Gründen auf alle zum Zeitpunkt der Veröffentlichung dieser Version von SQL Server Management Studio verfügbaren Versionen des SQL Servers beschränkt.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.