Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Att förstå skillnaderna i objektdefinitioner mellan en databas och ett SQL-projekt kan ge värdefulla insikter om databasens och projektets tillstånd, inklusive under pågående felsökning av utveckling eller regression. SQL-projekt omfattar verktyg för att visualisera skillnader, analysera ändringar som krävs för att uppdatera en databas, importera ändringar från en databas till en SQL-projektfiluppsättning och granska T-SQL-skript som skulle köras för att uppdatera en databas så att den matchar projektet.
Den här artikeln granskar metoder för att jämföra en databas och ett SQL-projekt med olika metoder:
- Du kan använda schema jämför för att visualisera skillnaderna mellan databaser och/eller projekt. Den här jämförelsen kan hjälpa dig att identifiera ändringar som måste synkroniseras mellan databasen och projektet.
- Du kan använda en distribuerad rapport för att sammanfatta och automatisera granskningar av de ändringar som krävs för att uppdatera en databas.
- Du kan använda schemajämförelse eller SqlPackage-extrahera för att importera ändringar från en databas till en uppsättning SQL-projektfiler.
- Du kan använda SqlPackage distributionsskript eller schemajämförelse för att granska de T-SQL-satser som körs för att uppdatera en databas så att den matchar projektet.
Schemajämförelse: visualisera skillnader
Förutsättningar
Jämförelse av grafiskt schema är ännu inte tillgänglig i SQL-projekt i SDK-stil i Visual Studio. Använd Azure Data Studio eller Visual Studio för att jämföra scheman.
Jämförelse av schema kräver ett grafiskt verktyg, såsom Visual Studio eller Azure Data Studio.
Sammanfattning
Jämförelse av schema erbjuder det mest visuellt omfattande gränssnittet för att förstå skillnaderna mellan en databas och ett projekt. En viktig funktion med schemajämförelse är att jämförelsens riktning är reversibel. Därför kan du använda schemajämförelse för att förstå ändringar från ett projekt som ska distribueras till en databas eller ändringar från en databas som ska läggas till i ett projekt. Du kan använda schemajäxning för att identifiera skillnader i objektdefinitioner, till exempel tabeller, vyer, lagrade procedurer och funktioner.
Den fullständiga uppsättningen skillnader eller en vald delmängd kan användas för att tillämpa ändringarna på databasen eller projektet. Schemajäxning kan också generera ett distributionsskript som, när det körs, effektivt tillämpar ändringarna på en databas.
Läs mer om schemajämförelse i översikten över schemajämförelse.
Distribuera rapport: granska ändringar
Distribuera rapporter kräver SqlPackage CLI.
dotnet tool install -g Microsoft.SqlPackage
Sammanfattning
En distributionsrapport innehåller en sammanfattning av de ändringar som krävs för att uppdatera en databas för att matcha ett projekt. SqlPackage CLI genererar en distributionsrapport genom att jämföra en källmodell (.dacpac SQL-projektversionsartefakt eller databas) med en måldatabas. Följande kommando genererar till exempel en distributionsrapport för en databas med namnet MyDatabase från ett SQL-projekt med namnet MyProject:
dotnet build MyProject.sqlproj
sqlpackage /Action:deployreport /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /OutputPath:deployreport.xml
Den producerade XML-koden är en förenklad form av distributionsplanen som sammanfattar de åtgärder som skulle utföras om en databasdistribution körs. Följande lista över åtgärder är inte fullständig:
CreateAlterDropRefreshUnbindSchemaBindingUnbindFulltextIndexTableDataMotionSPRenameEnableChangeTrackingDatabaseDisableChangeTrackingDatabase
En distributionsrapport kan granskas i en textredigerare eller i Visual Studio och ser ut ungefär så här:
<?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>
En distributionsrapport kan användas för att granska ändringarna samt övervaka händelser med potentiellt hög påverkan, till exempel datarörelse eller klustrad indexskapande/släpp. Dessa händelser visas i distributionsrapporten under elementet Alerts .
En fördel med åtgärden att distribuera XML-rapporten är att den kan användas för att automatisera granskningen av ändringar som krävs för att uppdatera en databas. XML-koden kan parsas och användas för att generera en rapport eller för att utlösa aviseringar baserat på de åtgärder eller objektnamn som anges.
Importera ändringar från en databas
Som du nämnde i avsnittet schemajäxning kan schemajäxning användas för att tillämpa ändringar från en databas i en SQL-projektfiluppsättning. Att tillämpa ändringar i ett SQL-projekt är ett vanligt scenario när du har en databas som utvecklas aktivt direkt och ett SQL-projekt används för att hantera databasobjekten i källkontrollen. Att slutföra den här åtgärden manuellt via Visual Studio eller Azure Data Studio kan vara tidskrävande, särskilt när databasen har många objekt eller sporadiska ändringar. I det här avsnittet granskar vi hur du automatiserar extraktet av objektdefinitioner från en databas till en SQL-projektfiluppsättning.
Förutsättningar
Med fokus på automatisering använder vi SqlPackage CLI för att extrahera objektdefinitioner från en databas till en SQL-projektfiluppsättning. .NET-mallarna Microsoft.Build.Sql.Templates används för att skapa en SQL-projektfil, ett valfritt steg.
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates
Sammanfattning
SqlPackage-extraheringskommandot tar en källdatabas och genererar en utdatadatabasmodell, antingen som en .dacpac fil eller som en uppsättning SQL-skript.
SqlPackage genererar som standard en .dacpac fil, men egenskapen /p:ExtractTarget= kan användas för att ange en uppsättning SQL-skript. Följande kommando extraherar databasen MyDatabase till en SQL-projektfil som angetts i mappen MyDatabaseProject:
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
När en mapp är under källkontroll skulle de extraherade objektdefinitionerna visa skillnader i källkontrollverktyg. Genom att använda SqlPackage för att generera filerna och söka efter skillnader i källkontroll kan du automatisera processen med att importera ändringar från en databas till en SQL-projektfiluppsättning.
I en serie med tre kommandon kan vi ta bort den tidigare uppsättningen filer, extrahera databasen och söka efter skillnader i källkontrollverktyget:
rm -rf MyDatabaseProject
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
git status --porcelain | wc -l
Våra utdata är antalet filer som har ändrats av det senaste SqlPackage-extraktet. Utdata från git status kommandot kan användas för att utlösa andra automatiseringssteg. Om vi vill använda den här uppsättningen filer som ett SQL-projekt kan vi använda .NET-mallarna Microsoft.Build.Sql.Templates för att skapa en SQL-projektfil i mappen MyDatabaseProject:
dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject
Granska T-SQL-skript för distribution
Som nämnts i avsnittet schemajämförelse kan schemajämförelse användas för att generera de T-SQL-skript som krävs för att uppdatera en databas för att matcha ett SQL-projekt. I det här avsnittet går vi igenom hur du använder SqlPackage för att automatisera genereringen av de T-SQL-skript som krävs för att uppdatera en databas för att matcha ett SQL-projekt så att de kan lagras som en pipelineartefakt för granskning och godkännande.
Förutsättningar
dotnet tool install -g Microsoft.SqlPackage
Sammanfattning
När du kör en SQL-projektdistribution med SqlPackage används publiceringsåtgärden , men om vi vill granska de T-SQL-skript som körs kan vi använda skriptåtgärden . Följande kommando genererar de T-SQL-skript som krävs för att uppdatera en databas med namnet MyDatabase för att matcha ett SQL-projekt med namnet MyProject:
dotnet build MyProject.sqlproj
sqlpackage /Action:Script /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /DeployScriptPath:Deployment.sql