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:

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 MyDatabaseProjectfestgelegt 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