Sie haben wahrscheinlich schon von SQL Server Data Tools (SSDT) gehört – ein praktisches Tool, mit dem Sie zwei Datenbankdefinitionen vergleichen können. Dabei können Sie als Quelle und Ziel beliebige Kombinationen von verbundenen Datenbanken, SQL Server-Datenbankprojekten oder Snapshot- oder .dacpac-Dateien verwenden. Die Ergebnisse des Vergleichs werden als eine Reihe von Aktionen angezeigt, die mit dem Zielobjekt durchgeführt werden müssen, um es mit der Quelle identisch zu machen. Sobald der Vergleich abgeschlossen ist, können Sie das Zielobjekt direkt aktualisieren (wenn es sich um ein Projekt oder eine Datenbank handelt) oder ein Skript generieren, das den gleichen Effekt erzielt.
Vergleich von Datenbankdefinitionen
-
Wählen Sie im Menü “Tools” die Option “SQL Server” und dann “Neuer Schema-Vergleich”.
Alternativ können Sie mit der rechten Maustaste auf das Projekt “TradeDev” im Lösungs-Explorer klicken und “Schema-Vergleich” auswählen.
Das Fenster “Schema-Vergleich” öffnet sich und Visual Studio weist ihm automatisch einen Namen wie “SqlSchemaCompare1” zu.
Unterhalb der Symbolleiste des Fensters “Schema-Vergleich” erscheinen zwei Dropdown-Menüs mit einem grünen Pfeil dazwischen. Über diese Menüs können Sie die Datenbankdefinitionen für die Vergleichsquelle und das Ziel auswählen. -
Wählen Sie im Dropdown-Menü “Quelle auswählen” die Option “Quelle auswählen” aus und es öffnet sich der Dialog “Quellenschema auswählen”.
Wenn Sie das Fenster “Schema-Vergleich” durch einen Rechtsklick auf den Projektnamen geöffnet haben, ist das Quellschema bereits ausgefüllt, und Sie können mit Schritt 4 fortfahren. -
Wählen Sie den Optionsbutton “Projekt” und dann das Datenbankprojekt “TradeDev” aus, das Sie in einem vorherigen Schritt erstellt haben.
-
Wählen Sie im Dropdown-Menü “Ziel auswählen” im Fenster “Schema-Vergleich” die Option “Ziel auswählen”, und es öffnet sich der Dialog “Zielschema auswählen”. Wählen Sie in der Abschnitt “Schema” die Option “Datenbank” und dann die Schaltfläche “Neue Verbindung”.
-
Geben Sie im Dialogfeld “Verbindungseigenschaften” den Servernamen ein, auf dem sich die TradeDev-Datenbank befindet und stellen Sie sicher, dass die richtigen Anmeldeinformationen angegeben sind. Wählen Sie dann “TradeDev” unter “Mit einer Datenbank verbinden” aus und klicken Sie auf “OK”.
Sie können auch die Schaltfläche “Optionen” in der Symbolleiste des Fensters “Schema-Vergleich” auswählen, um festzulegen, welche Objekte verglichen werden sollen, welche Arten von Unterschieden ignoriert werden sollen und andere Einstellungen vorzunehmen. -
Wählen Sie die Schaltfläche “Vergleichen” in der Symbolleiste des Fensters “Schema-Vergleich”, um den Vergleichsvorgang zu starten.
Wenn der Vergleich abgeschlossen ist, werden die strukturellen Unterschiede zwischen dem Projekt und der Datenbank im oberen Teil des Fensters im Bereich “Ergebnisse” angezeigt. Standardmäßig gruppieren die Vergleichsergebnisse alle Unterschiede nach Aktion (z. B. Löschen, Ändern oder Hinzufügen). Der Bereich “Ergebnisse” zeigt eine Zeile für jedes Datenbankobjekt an, das sich zwischen den Datenbankdefinitionen unterscheidet. Jede Zeile identifiziert das Objekt im Quell- oder Zielschema (oder beiden) und die Aktion, die auf dem Zielschema durchgeführt wird, um das Zielschemaobjekt mit dem Quellobjekt identisch zu machen. Wenn ein Objekt neu gestaltet wurde und entweder umbenannt oder in ein neues Schema verschoben wurde, haben Quell- und Zielnamen unterschiedliche Namen und der Quellname wird fett dargestellt, um den Unterschied hervorzuheben.
Standardmäßig werden Objekte, die in beiden Schemata gleich sind oder nicht für ein Update unterstützt werden (z. B. integrierte Objekte), in der Ergebnisliste ausgeblendet. Sie können die entsprechenden Filterbuttons in der Symbolleiste auswählen, um diese Objekte anzuzeigen. -
Finden Sie die Tabelle “Products” in der Gruppe “Tabellen”. Wählen Sie die Zeile aus, und die Quell- und Zielschemadefinitionen der Tabelle werden im Bereich “Objektdefinitionen” mit den Unterschieden hervorgehoben angezeigt. Sie können auch die Zeile der “Products”-Tabelle im “Ergebnis”-Bereich erweitern, um die spezifischen Elemente in der Tabelle zu inspizieren, die sich unterscheiden.
-
Standardmäßig sind alle Unterschiede im Bereich der “Update Target”-Aktion enthalten. Sie können Unterschiede ausschließen, die nicht synchronisierst werden sollen. Dazu deaktivieren Sie das Aktionskästchen in der Mitte jeder Zeile. Alternativ können Sie mit der rechten Maustaste auf eine Zeile im Schemabereich klicken und “Ausschließen” auswählen. Die Zeile wird sofort ausgegraut. Wenn es Zeit ist, die Zieldatenbank zu aktualisieren, wird diese Zeile nicht für ausstehende Änderungen berücksichtigt.
Sie können auch mit der rechten Maustaste auf eine Gruppenzeile klicken und “Alle ausschließen” oder “Alle einfügen” auswählen, was dem Deaktivieren oder Aktivieren aller Unterschiede in dieser Gruppe entspricht. Wenn Sie die Ergebnisse nach Schema gruppieren, ist dies eine nützliche Möglichkeit, alle Änderungen an einem bestimmten Schema einzuschließen oder auszuschließen. -
Wenn Sie SQLCMD-Variablen verwenden, verwendet das Schema-Vergleichs-Tool die lokalen Werte in den Projekteigenschaften, und Standardwerte werden ignoriert.
Um das Zielschema zu aktualisieren, haben Sie zwei Optionen. Sie können das Zielschema direkt aus dem Fenster “Schema-Vergleich” aktualisieren, wenn das Ziel eine Datenbank oder ein Projekt ist, oder Sie können ein Update-Skript generieren, wenn das Ziel eine Datenbank oder eine Datenbankdatei ist. Das generierte Skript wird im Transact-SQL-Editor angezeigt, in dem Sie das Skript inspizieren und gegen eine Datenbank ausführen können.
Schemavergleiche mit dem Visual Studio-Automatisierungsmodell
-
Öffnen Sie das Menü “Ansicht”, zeigen Sie auf “Weitere Fenster” und wählen Sie “Befehlsfenster”.
-
Geben Sie im Befehlsfenster den folgenden Befehl ein:
Tools.SSDTNewSchemaComparison
Direkte Aktualisierung im Schema-Vergleichsfenster
-
Wählen Sie die Schaltfläche “Aktualisieren” in der Symbolleiste des Fensters “Schema-Vergleich”.
-
Überprüfen Sie das generierte Änderungsskript. Sie können das Skript speichern, indem Sie das Menü “Datei/Neu” verwenden. Dies kann nützlich sein, wenn Sie nicht berechtigt sind, eine Produktionsdatenbank zu aktualisieren, in diesem Fall können Sie das Skript einem Datenbankadministrator für die spätere Bereitstellung geben.
-
Wenn Sie die Berechtigung zum Aktualisieren der Datenbank haben, wählen Sie die Schaltfläche “Query ausführen” in der Symbolleiste des Bearbeitungsfensters aus, um das Skript auszuführen.
Aktualisierung über Skript
-
Wählen Sie die Schaltfläche “Skript generieren” (die vierte von links) in der Symbolleiste des Fensters “Schema-Vergleich”.
-
Das generierte Skript wird in einem neuen Transact-SQL-Editorfenster angezeigt.
-
Überprüfen Sie das generierte Änderungsskript. Sie können das Skript speichern, indem Sie das Menü “Datei/Speichern” oder “Datei/Speichern unter” verwenden.
Ein gespeichertes Skript kann nützlich sein, wenn Sie nicht berechtigt sind, eine Produktionsdatenbank zu aktualisieren. In diesen Fällen können Sie das Skript einem Datenbankadministrator für die spätere Bereitstellung geben.
Alternativ können Sie den Transact-SQL-Editor mit einem geeigneten Server verbinden und das Skript direkt ausführen. Bevor Sie diesen Vorgang durchführen, müssen Sie die Berechtigung zum Erstellen oder Aktualisieren der Datenbank haben. Wenn Sie die Berechtigung zum Aktualisieren der Datenbank haben, wählen Sie die Schaltfläche “Query ausführen” in der Symbolleiste des Bearbeitungsfensters aus, um das Skript auszuführen. -
Wählen Sie die Schaltfläche “Verbinden”. Dadurch wird entweder eine Verbindung zum aktuellen Server hergestellt oder Sie werden aufgefordert, einen Server im Dialogfeld “Mit Server verbinden” einzugeben oder auszuwählen. Der Datenbankname wird im Skript als Befehlsvariable definiert.
-
Überprüfen Sie das Skript und nehmen Sie bei Bedarf Änderungen an den Befehlsvariablen vor, die den Ziel-Datenbanknamen und das zugehörige Präfix sowie die Dateipfade definieren.
-
Wählen Sie die Schaltfläche “Ausführen” in der Symbolleiste des Bearbeitungsfensters, um das Skript auszuführen.
Lassen Sie uns wissen, wenn Sie weitere Fragen haben!