Vergleichen einer Datenbank und eines Projekts
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Das Verständnis der Objektdefinitionsunterschiede zwischen einer Datenbank und einem SQL-Projekt kann wertvolle Einblicke in den Zustand Ihrer Datenbank und Ihres Projekts liefern, einschließlich bei der laufenden Entwicklung oder Regressionsbehandlung. SQL-Projekte umfassen Tools zum Visualisieren von Unterschieden, Analysieren von Änderungen, die zum Aktualisieren einer Datenbank erforderlich sind, Importieren von Änderungen aus einer Datenbank in einen SQL-Projektdateisatz und Überprüfen von T-SQL-Skripts, die ausgeführt werden würden, um eine Datenbank entsprechend dem Projekt zu aktualisieren.
In diesem Artikel werden Methoden zum Vergleichen einer Datenbank und eines SQL-Projekts mit verschiedenen Ansätzen überprüft:
- Sie können den Schemavergleich verwenden, um die Unterschiede zwischen Datenbanken und/oder Projekten zu visualisieren. Dieser Vergleich kann Ihnen helfen, Änderungen zu identifizieren, die zwischen der Datenbank und dem Projekt synchronisiert werden müssen.
- Sie können einen Bereitstellungsbericht verwenden, um Prüfungen der zum Aktualisieren einer Datenbank erforderlichen Änderungen zusammenzufassen und zu automatisieren.
- Sie können Schemaabgleiche oder SqlPackage-Extrakt verwenden, um Änderungen aus einer Datenbank in einen SQL-Projektdateisatz zu importieren.
- Sie können das SqlPackage-Bereitstellen Skript oder den Schemavergleich verwenden, um die T-SQL-Anweisungen zu überprüfen, die ausgeführt werden, um eine Datenbank entsprechend dem Projekt zu aktualisieren.
Schemavergleich: Visualisieren von Unterschieden
Voraussetzungen
Der grafische Schemavergleich ist in der Vorschau von SQL-Projekten im SDK-Stil in Visual Studio noch nicht verfügbar. Verwenden Sie Azure Data Studio oder Visual Studio, um Schemas zu vergleichen.
Für den Schemavergleich ist ein grafisches Tool wie Visual Studio oder Azure Data Studio erforderlich.
Zusammenfassung
Der Schemaabgleich bietet die visuell reichere Schnittstelle, um die Unterschiede zwischen einer Datenbank und einem Projekt zu verstehen. Eine Schlüsselfunktion beim Schemavergleich ist, dass die Richtung des Vergleichs umkehrbar ist. Daher können Sie den Schemavergleich verwenden, um Änderungen aus einem Projekt zu verstehen, die in einer Datenbank bereitgestellt werden sollen, oder Änderungen aus einer Datenbank, die einem Projekt hinzugefügt werden sollen. Sie können den Schemavergleich verwenden, um Unterschiede in Objektdefinitionen zu identifizieren, z. B. Tabellen, Anzeigen, gespeicherte Prozeduren und Funktionen.
Der vollständige Satz von Unterschieden oder eine ausgewählte Teilmenge kann verwendet werden, um die Änderungen auf die Datenbank oder das Projekt anzuwenden. Der Schemaabgleich kann auch ein Bereitstellungsskript generieren, das die Änderungen effektiv auf eine Datenbank anwendet.
Weitere Informationen zum Schemavergleich finden Sie in der Schemavergleichsübersicht.
Bereitstellen des Berichts: Überprüfen von Änderungen
Für die Bereitstellung von Berichten ist die SqlPackage-CLI erforderlich.
dotnet tool install -g Microsoft.SqlPackage
Zusammenfassung
Ein Bereitstellungsbericht enthält eine Zusammenfassung der Änderungen, die zum Aktualisieren einer Datenbank zur Zuordnung eines Projektes erforderlich sind. Die SqlPackage CLI generiert einen Bereitstellungsbericht, indem ein Quellmodell (.dacpac
-SQL-Projektb-Buildartefakt oder -datenbank) mit einer Zieldatenbank verglichen wird. Der folgende Befehl generiert z. B. einen Bereitstellungsbericht für eine Datenbank mit dem Namen MyDatabase
aus einem SQL-Projekt mit dem Namen MyProject
:
dotnet build MyProject.sqlproj
sqlpackage /Action:deployreport /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /OutputPath:deployreport.xml
Der erstellte XML-Code ist eine vereinfachte Form des Bereitstellungsplans und fasst die Vorgänge zusammen, die ausgeführt werden würden, wenn eine Datenbankbereitstellung ausgeführt wird. Die folgende Liste der Vorgänge ist nicht erschöpfend:
Create
Alter
Drop
Refresh
UnbindSchemaBinding
UnbindFulltextIndex
TableDataMotion
SPRename
EnableChangeTrackingDatabase
DisableChangeTrackingDatabase
Ein Bereitstellungsbericht kann in einem Text-Editor oder in Visual Studio überprüft werden und sieht ähnlich wie Folgendes aus:
<?xml version="1.0" encoding="utf-8"?>
<DeploymentReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DeployReport/2012/02">
<Alerts />
<Operations>
<Operation Name="Create">
<Item Value="[CO].[Products].[IX_Products_CategorySlug]" Type="SqlIndex" />
</Operation>
<Operation Name="Alter">
<Item Value="[CO].[Brands]" Type="SqlTable" />
<Item Value="[CO].[AddProductImage]" Type="SqlProcedure" />
</Operation>
<Operation Name="Refresh">
<Item Value="[CO].[SelectStarView]" Type="SqlView" />
</Operation>
</Operations>
</DeploymentReport>
Ein Bereitstellungsbericht kann verwendet werden, um die Änderungen zu überprüfen und für Überwachungen potenziell betroffener Ereignisse, z. B. Datenbewegung oder Gruppierter Index erstellen/ablegen. Diese Ereignisse werden im Bereitstellungsbericht unter dem Alerts
-Element aufgeführt.
Ein Vorteil der XML-Operation für die Bereitstellung von Berichten besteht darin, dass sie verwendet werden kann, um die Überprüfung der zum Aktualisieren einer Datenbank erforderlichen Änderungen zu automatisieren. Der XML-Code kann analysiert und verwendet werden, um einen Bericht zu generieren oder Warnungen basierend auf den aufgelisteten Vorgängen oder Objektnamen auszulösen.
Importieren von Änderungen aus einer Datenbank
Wie im Abschnitt Schemaabgleich erwähnt, kann der Schemaabgleich verwendet werden, um Änderungen aus einer Datenbank in einen SQL-Projektdateisatz anzuwenden. Das Anwenden von Änderungen auf ein SQL-Projekt ist ein häufiges Szenario, wenn Sie über eine Datenbank verfügen, die aktiv direkt entwickelt wird, und ein SQL-Projekt verwendet wird, um die Datenbankobjekte in der Quellcodeverwaltung zu verwalten. Das manuelle Abschließen dieser Operation über Visual Studio oder Azure Data Studio kann zeitaufwändig sein, insbesondere, wenn die Datenbank viele Objekte oder sporadische Änderungen aufweist. In diesem Abschnitt wird erläutert, wie Sie das Extrahieren von Objektdefinitionen aus einer Datenbank in einen SQL-Projektdateisatz automatisieren.
Voraussetzungen
Mit schwerpunktmäßiger Automatisierung verwenden wir die SqlPackage-CLI, um Objektdefinitionen aus einer Datenbank in einen SQL-Projektdateisatz zu extrahieren. Die .NET-Vorlagen für Microsoft.Build.Sql.Templates werden zum Erstellen einer SQL-Projektdatei verwendet, einem optionalen Schritt.
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates
Zusammenfassung
Der SqlPackage-Extrahierungsbefehl verwendet eine Quelldatenbank und generiert ein Ausgabedatenbankmodell, entweder als .dacpac
-Datei oder als Gruppe von SQL-Skripts. SqlPackage wird standardmäßig zum Generieren einer .dacpac
-Datei verwendet, aber die /p:ExtractTarget=
-Eigenschaft kann verwendet werden, um eine Reihe von SQL-Skripts anzugeben. Mit dem folgenden Befehl wird die Datenbank MyDatabase
in eine SQL-Projektdatei extrahiert, die im Ordner MyDatabaseProject
festgelegt ist:
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
Wenn sich ein Ordner unter der Quellcodeverwaltung befindet, würden die extrahierten Objektdefinitionen Unterschiede bei der Quellcodeverwaltung anzeigen. Mithilfe von SqlPackage können Sie die Dateien generieren und auf Unterschiede bei der Quellcodeverwaltung überprüfen, indem Sie den Prozess des Importierens von Änderungen aus einer Datenbank in einen SQL-Projektdateisatz automatisieren.
In einer Reihe von drei Befehlen können wir den vorherigen Satz von Dateien entfernen, die Datenbank extrahieren und nach Unterschieden im Quellcodeverwaltungstool suchen:
rm -rf MyDatabaseProject
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
git status --porcelain | wc -l
Unsere Ausgabe ist die Anzahl der Dateien, die durch die neueste SqlPackage-Extrahierung geändert wurden. Die Ausgabe des git status
-Befehls kann verwendet werden, um andere Automatisierungsschritte auszulösen. Wenn wir diese Gruppe von Dateien als SQL-Projekt verwenden möchten, können wir die .NET-Vorlagen von Microsoft.Build.Sql.Templates verwenden, um eine SQL-Projektdatei im Ordner MyDatabaseProject
zu erstellen:
dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject
Überprüfen von T-SQL-Skripts für die Bereitstellung
Wie im Abschnitt Schemaabgleich erwähnt, kann der Schemaabgleich verwendet werden, um die T-SQL-Skripts zu generieren, die erforderlich sind, um eine Datenbank so zu aktualisieren, dass sie mit einem SQL-Projekt übereinstimmt. In diesem Abschnitt wird erläutert, wie mit SqlPackage die Generierung von T-SQL-Skripten automatisiert werden kann, die für die Aktualisierung einer Datenbank erforderlich sind, damit sie mit einem SQL-Projekt übereinstimmen und als Pipelineartefakt zur Überprüfung und Genehmigung gespeichert werden können.
Voraussetzungen
dotnet tool install -g Microsoft.SqlPackage
Zusammenfassung
Beim Ausführen einer SQL-Projektbereitstellung mit SqlPackage wird die Aktion Veröffentlichung verwendet. Wenn wir jedoch die ausgeführten T-SQL-Skripts überprüfen möchten, können wir die Aktion Skript verwenden. Der folgende Befehl generiert die T-SQL-Skripte, die erforderlich sind, um eine Datenbank mit dem Namen MyDatabase
für die Zuordnung zu einem SQL-Projekt mit dem Namen MyProject
zu aktualisieren:
dotnet build MyProject.sqlproj
sqlpackage /Action:Script /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /DeployScriptPath:Deployment.sql