Sdílet prostřednictvím


Porovnání databáze a projektu

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Pochopení rozdílů mezi definicemi objektů mezi databází a projektem SQL může poskytovat cenné přehledy o stavu databáze a projektu, včetně během probíhajícího vývoje nebo regrese řešení potíží. Projekty SQL zahrnují nástroje pro vizualizaci rozdílů, analýzu změn potřebných k aktualizaci databáze, import změn z databáze do sady souborů projektu SQL a kontrolu skriptů T-SQL, které by se spustily za účelem aktualizace databáze tak, aby odpovídaly projektu.

Tento článek popisuje metody porovnání databáze a projektu SQL s využitím různých přístupů:

  • Pomocí porovnání schémat můžete vizualizovat rozdíly mezi databázemi a projekty. Toto porovnání vám pomůže identifikovat změny, které je potřeba synchronizovat mezi databází a projektem.
  • Sestavu nasazení můžete použít ke shrnutí a automatizaci kontrol změn potřebných k aktualizaci databáze.
  • Můžete použít porovnání schématu nebo příkaz extrahovat v SqlPackage k importu změn z databáze do sady souborů projektu SQL.
  • Pomocí skriptu nasazení SqlPackage nebo porovnání schématu můžete zkontrolovat příkazy T-SQL, které se spouštějí pro aktualizaci databáze tak, aby odpovídala projektu.

Porovnání schématu: Vizualizace rozdílů

Prerequisites

Porovnání grafického schématu zatím není k dispozici ve verzi náhledu SQL projektů ve stylu SDK v sadě Visual Studio. K porovnání schémat použijte Azure Data Studio nebo Visual Studio.

Porovnání schémat vyžaduje grafický nástroj, jako je Visual Studio, nebo rozšíření MSSQL pro Visual Studio Code.

Summary

Porovnání schémat poskytuje vizuálně nejbohatší rozhraní pro pochopení rozdílů mezi databází a projektem. Klíčovou schopností porovnání schématu je, že směrovost porovnání je vratná. V důsledku toho můžete pomocí porovnání schémat pochopit změny projektu, které se mají nasadit do databáze, nebo změny z databáze, které chcete přidat do projektu. Pomocí porovnání schémat můžete identifikovat rozdíly v definicích objektů, jako jsou tabulky, zobrazení, uložené procedury a funkce.

Úplnou sadu rozdílů nebo vybrané podmnožiny lze použít k použití změn v databázi nebo projektu. Porovnání schématu může také vygenerovat skript nasazení, který při spuštění efektivně použije změny v databázi.

Další informace o porovnání schématu najdete v přehledu porovnání schémat.

Nasazení sestavy: Revize změn

Nasazení sestav vyžaduje rozhraní příkazového řádku SqlPackage.

dotnet tool install -g Microsoft.SqlPackage

Summary

Zpráva o nasazení poskytuje souhrn změn potřebných k aktualizaci databáze, aby byla sladěna s projektem. SqlPackage CLI vygeneruje sestavu nasazení porovnáním zdrojového modelu (.dacpac artefaktu sestavení projektu SQL nebo databáze) s cílovou databází. Například následující příkaz vygeneruje sestavu nasazení pro databázi pojmenovanou MyDatabase z projektu SQL s názvem MyProject:

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

Vytvořený KÓD XML je zjednodušená forma plánu nasazení se souhrnem operací, které by se prováděly při spuštění nasazení databáze. Následující seznam operací není vyčerpávající:

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

Sestavu nasazení je možné zkontrolovat v textovém editoru nebo v sadě Visual Studio a vypadá nějak takto:

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

Sestavu nasazení můžete použít ke kontrole změn a monitorování událostí s potenciálně vysokým dopadem, jako je například pohyb dat nebo vytvoření či odstranění clusterovaného indexu. Tyto události by byly uvedeny ve zprávě o nasazení pod prvkem Alerts.

Výhodou operace nasazení sestavy XML je, že se dá použít k automatizaci kontroly změn nutných pro aktualizaci databáze. XML lze analyzovat a použít k vygenerování sestavy nebo k aktivaci výstrah na základě uvedených operací nebo názvů objektů.

Import změn z databáze

Jak je uvedeno v části porovnání schématu, lze použít porovnání schémat k použití změn z databáze do sady souborů projektu SQL. Použití změn v projektu SQL je běžný scénář, pokud máte databázi, která je aktivně vyvinuta přímo a projekt SQL se používá ke správě databázových objektů ve správě zdrojového kódu. Ruční dokončení této operace prostřednictvím sady Visual Studio nebo Azure Data Studio může být časově náročné, zejména v případě, že databáze obsahuje mnoho objektů nebo občasných změn. V této části si projdeme, jak automatizovat extrakci definic objektů z databáze do sady souborů projektu SQL.

Prerequisites

S důrazem na automatizaci používáme rozhraní příkazového řádku SqlPackage k extrakci definic objektů z databáze do sady souborů projektu SQL. Šablony .NET Microsoft.Build.Sql.Templates slouží k vytvoření souboru projektu SQL, volitelného kroku.

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

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

Summary

Příkaz extrakce SqlPackage převezme zdrojovou databázi a vygeneruje výstupní databázový model, a to buď jako soubor, nebo jako .dacpac sadu skriptů SQL. SqlPackage ve výchozím nastavení generuje .dacpac soubor, ale /p:ExtractTarget= vlastnost lze použít k určení sady skriptů SQL. Následující příkaz extrahuje databázi MyDatabase do souboru projektu SQL nastaveného ve složce MyDatabaseProject:

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

Když je složka pod správou zdrojového kódu, definice extrahovaného objektu by zobrazovaly rozdíly v nástrojích správy zdrojového kódu. Pomocí sqlPackage vygenerujte soubory a zkontrolujte rozdíly ve správě zdrojového kódu, můžete automatizovat proces importu změn z databáze do sady souborů projektu SQL.

V řadě tří příkazů můžeme odebrat předchozí sadu souborů, extrahovat databázi a zkontrolovat rozdíly v nástrojích správy zdrojového kódu:

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

Výstupem je počet souborů, které byly změněny nejnovějším extrahováním SqlPackage. Výstup příkazu git status lze použít k aktivaci dalších kroků automatizace. Pokud bychom chtěli použít tuto sadu souborů jako projekt SQL, můžeme použít šablony Microsoft.Build.Sql.Templates .NET k vytvoření souboru projektu SQL ve složce MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Kontrola nasazení skriptů T-SQL

Jak je uvedeno v části porovnání schémat, porovnání schémat lze použít k vygenerování skriptů T-SQL potřebných pro aktualizaci databáze tak, aby odpovídala projektu SQL. V této části si projdeme, jak pomocí sqlPackage automatizovat generování skriptů T-SQL potřebných k aktualizaci databáze tak, aby odpovídaly projektu SQL, aby se mohly uložit jako artefakt kanálu pro kontrolu a schválení.

Prerequisites

dotnet tool install -g Microsoft.SqlPackage

Summary

Spuštění nasazení projektu SQL pomocí SqlPackage používá akci publikování, ale pokud chceme zkontrolovat skripty T-SQL, které se spustily, můžeme použít akci skript. Následující příkaz vygeneruje skripty T-SQL potřebné k aktualizaci databáze pojmenované MyDatabase tak, aby odpovídaly projektu SQL s názvem MyProject:

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