Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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í:
CreateAlterDropRefreshUnbindSchemaBindingUnbindFulltextIndexTableDataMotionSPRenameEnableChangeTrackingDatabaseDisableChangeTrackingDatabase
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