Condividi tramite


Confrontare un database e un progetto

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Comprendere le differenze di definizione dell'oggetto tra un database e un progetto SQL può fornire informazioni dettagliate importanti sullo stato del database e del progetto, inclusi durante la risoluzione dei problemi di sviluppo o regressione in corso. I progetti SQL includono strumenti per la visualizzazione delle differenze, l'analisi delle modifiche necessarie per l'aggiornamento di un database, l'importazione di modifiche da un database in un set di file di progetto SQL e la revisione degli script T-SQL che verrebbero eseguiti per aggiornare un database in modo che corrisponda al progetto.

Questo articolo esamina i metodi per confrontare un database e un progetto SQL usando approcci diversi:

  • È possibile usare il confronto schemi per visualizzare le differenze tra database e/o progetti. Questo confronto consente di identificare le modifiche che devono essere sincronizzate tra il database e il progetto.
  • È possibile usare un report di distribuzione per riepilogare e automatizzare le revisioni delle modifiche necessarie per aggiornare un database.
  • È possibile usare il confronto schemi o l'estrazione di SqlPackage per importare le modifiche da un database in un set di file di progetto SQL.
  • È possibile usare lo script o lo schema di distribuzione di SqlPackage per esaminare le istruzioni T-SQL eseguite per aggiornare un database in modo che corrisponda al progetto.

Confronto dello schema: visualizzare le differenze

Prerequisiti

Il confronto dello schema grafico non è ancora disponibile nell'anteprima dei progetti SQL in stile SDK in Visual Studio. Usare Azure Data Studio o Visual Studio per confrontare gli schemi.

Il confronto schemi richiede uno strumento grafico, ad esempio Visual Studio o Azure Data Studio.

Riepilogo

Il confronto schemi fornisce l'interfaccia visivamente più ricca per comprendere le differenze tra un database e un progetto. Una funzionalità chiave con confronto schemi è che la direzionalità del confronto è reversibile. Di conseguenza, è possibile usare il confronto schemi per comprendere le modifiche di un progetto da distribuire in un database o le modifiche da un database da aggiungere a un progetto. È possibile usare il confronto schemi per identificare le differenze nelle definizioni degli oggetti, ad esempio tabelle, viste, stored procedure e funzioni.

Il insieme completo di differenze o un sottoinsieme selezionato può essere usato per applicare le modifiche al database o al progetto. Il confronto schemi può anche generare uno script di distribuzione che, quando eseguito, applica in modo efficace le modifiche a un database.

Altre informazioni sul confronto schemi sono disponibili nella panoramica del confronto schemi.

Implementare il report: rivedere le modifiche

L’implementazione dei report richiede l’interfaccia della riga di comando (CLI) SqlPackage.

dotnet tool install -g Microsoft.SqlPackage

Riepilogo

Un report di distribuzione fornisce un riepilogo delle modifiche necessarie per aggiornare un database in modo che corrisponda a un progetto. CLI SqlPackage genera un report di distribuzione confrontando un modello di origine (.dacpac artefatto o database della compilazione del progetto SQL) con un database di destinazione. Ad esempio, il comando seguente genera un report di distribuzione per un database denominato MyDatabase da un progetto SQL denominato MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:deployreport /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /OutputPath:deployreport.xml

Il codice XML prodotto è una forma semplificata del piano di distribuzione, che riepiloga le operazioni che verrebbero eseguite se viene eseguita una distribuzione del database. Il seguente elenco di operazioni non è esaustivo:

  • Create
  • Alter
  • Drop
  • Refresh
  • UnbindSchemaBinding
  • UnbindFulltextIndex
  • TableDataMotion
  • SPRename
  • EnableChangeTrackingDatabase
  • DisableChangeTrackingDatabase

Un report di distribuzione può essere esaminato in un editor di testo o in Visual Studio e sarà simile al seguente:

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

È possibile usare un report di distribuzione per esaminare le modifiche e monitorare gli eventi potenzialmente ad impatto elevato, ad esempio il movimento dei dati o la creazione/eliminazione dell'indice cluster. Questi eventi verranno elencati nel report di distribuzione sotto l'elemento Alerts.

Un vantaggio dell'operazione di distribuzione XML del report consiste nel fatto che può essere usato per automatizzare la revisione delle modifiche necessarie per aggiornare un database. Il codice XML può essere analizzato e utilizzato per generare un report o per attivare avvisi in base alle operazioni o ai nomi degli oggetti elencati.

Importare le modifiche da un database

Come indicato nella sezione confronto schemi, è possibile usare il confronto schemi per applicare le modifiche da un database a un insieme di file di progetto SQL. L'applicazione di modifiche a un progetto SQL è uno scenario comune quando si dispone di un database sviluppato attivamente in e un progetto SQL viene usato per gestire gli oggetti di database nel controllo del codice sorgente. Il completamento manuale di questa operazione tramite Visual Studio o Azure Data Studio può richiedere molto tempo, soprattutto quando il database presenta molti oggetti o modifiche sporadiche. In questa sezione viene illustrato come automatizzare l'estrazione di definizioni di oggetti da un database in un insieme di file di progetto SQL.

Prerequisiti

Con particolare attenzione all'automazione, si usa CLI SqlPackage per estrarre le definizioni degli oggetti da un database in un insieme di file di progetto SQL. I modelli .NET di Microsoft.Build.Sql.Templates vengono usati per creare un file di progetto SQL, un passaggio facoltativo.

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

Riepilogo

Il comando SqlPackage extract accetta un database di origine e genera un modello di database di output, come .dacpac file o come insieme di script SQL. Per impostazione predefinita, SqlPackage genera un .dacpac file, ma la /p:ExtractTarget= proprietà può essere usata per specificare un insieme di script SQL. Il comando seguente estrae il database MyDatabase in un file di progetto SQL impostato nella cartella MyDatabaseProject:

sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType

Quando una cartella è sotto controllo del codice sorgente, le definizioni degli oggetti estratti mostrano differenze negli strumenti di controllo del codice sorgente. Usando SqlPackage per generare i file e verificare le differenze nel controllo del codice sorgente, è possibile automatizzare il processo di importazione delle modifiche da un database in un insieme di file di progetto SQL.

In una serie di tre comandi è possibile rimuovere l’insieme di file precedente, estrarre il database e verificare le differenze negli strumenti di controllo del codice sorgente:

rm -rf MyDatabaseProject
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
git status --porcelain | wc -l

L'output è il numero di file modificati dall'estratto SqlPackage più recente. L'output del git status comando può essere usato per attivare altri passaggi di automazione. Se si vuole usare questo insieme di file come progetto SQL, è possibile usare i modelli .NET di Microsoft.Build.Sql.Templates per creare un file di progetto SQL nella cartella MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Esaminare gli script T-SQL di distribuzione

Come indicato nella sezione confronto schemi, è possibile usare il confronto schemi per generare gli script T-SQL necessari per aggiornare un database in modo che corrisponda a un progetto SQL. In questa sezione viene illustrato come usare SqlPackage per automatizzare la generazione degli script T-SQL necessari per aggiornare un database in modo che corrisponda a un progetto SQL in modo che possano essere archiviati come artefatto della pipeline per la revisione e l'approvazione.

Prerequisiti

dotnet tool install -g Microsoft.SqlPackage

Riepilogo

L'esecuzione di una distribuzione di progetto SQL con SqlPackage usa l'azione di pubblicazione, ma se si vuole esaminare gli script T-SQL eseguiti, è possibile usare l'azione script. Il comando seguente genera gli script T-SQL necessari per aggiornare un database denominato MyDatabase in modo che corrisponda a un progetto SQL denominatoMyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:Script /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /DeployScriptPath:Deployment.sql