Dela via


Vad är SQL-databasprojekt?

gäller för: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Ett SQL-databasprojekt är en lokal representation av SQL-objekt som utgör schemat för en enskild databas, till exempel tabeller, lagrade procedurer eller funktioner. Utvecklingscykeln för ett SQL-databasprojekt gör det möjligt att integrera databasutveckling i ett CI/CD-arbetsflöde (kontinuerlig integrering och kontinuerlig distribution) som är bekant som en metod för utveckling.

Överblick

SQL-projekt baseras i deklarativa T-SQL-instruktioner. I sql database-projektkoden skapar du varje objekt en gång. Om du behöver ändra något om objektet, till exempel lägga till kolumner eller ändra en datatyp, ändrar du den singularfil som deklarerar objektet för första och enda gången.

När ett SQL-databasprojekt skapas är utdataartefakten en .dacpac fil. Nya och befintliga databaser kan uppdateras så att de matchar innehållet i .dacpac genom att publicera .dacpac till en måldatabas.

SQL Database-projektramverket kring din databaskod som lägger till två grundläggande funktioner för den uppsättningen filer med dess byggprocess:

  • validering av referenser mellan objekt och syntaxen mot en viss version av SQL
  • distribuering av byggartefakt till nya eller befintliga databaser

Skärmbild av sammanfattning av SQL Database Projects som innehåller skript före distribution och efter distribution samt databasobjekt.

Funktionerna för SQL-databasprojekt tillhandahålls av Microsoft.SqlServer.DacFx- .NET-bibliotek och finns i flera verktyg för SQL-utveckling. DacFx har flera utökningspunkter, till exempel ändring av distributionssteg och möjlighet att skapa anpassade regler för kodanalys. Projektets SDK för SQL-projekt är Microsoft.Build.Sql, som för närvarande finns i förhandsversion och rekommenderas för ny utveckling.

Validering

När ett SQL-projekt skapas verifieras relationerna mellan objekten. En vydefinition kan till exempel inte innehålla en tabell eller kolumner som inte finns i SQL-projektet.

Dessutom innehåller ett SQL-projekt en egenskap i sin .sqlproj fil med namnet "målplattform". Den här informationen används under byggprocessen för att verifiera att funktionerna och T-SQL-syntaxen finns i den versionen av SQL. De JSON-funktioner som lagts till i SQL Server 2022 kan till exempel inte användas i ett SQL-projekt som är inställt på sql140-målplattformen (SQL Server 2017).

För att skapa ett SQL-projekt kör vi dotnet build från kommandoraden. I grafiska verktyg som stöder SQL-projekt (Azure Data Studio, VS Code och Visual Studio) finns det ett menyalternativ för att skapa SQL-projektet.

Konsolutdata från byggprocessen kan innehålla fel (byggfel) eller varningar. Kompileringsvarningar kan innehålla inkonsekvent versalisering i objektnamn och andra anpassningsbara bästa praxis, men stoppar inte bygget.

Artefaktutdata från byggprocessen är en .dacpac fil som finns för en version med standardinställningar i mappen bin/Debug.

Utplacering

Utdatafilen, .dacpac, är kraftfull, återanvändbar och deklarativ artefakt. Med den här filen kan vi använda SqlPackage eller andra verktyg för att tillämpa vår databaskod på en databas. SqlPackage-kommandot för att distribuera en .dacpac är kommandot publicera.

Skärmbild av översikt över processer från SQL-projektversion till dacpac och distribution till databas.

Till exempel sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}.

Nya databaser

SqlPackage navigerar i objektrelationerna för att skapa varje objekt i rätt ordning när du publicerar ett dacpac till en ny databas. Till exempel skapar SqlPackage Table_A före Table_B när Table_B har en främmande nyckel till Table_A.

Du vill inte köra en hel mapp med SQL-skript, särskilt när du kan använda SQL-projekt som automatiskt kör varje T-SQL-avsnitt i rätt ordning baserat på objektrelationer.

Befintliga databaser

Förutom att navigera i objekthierarkin när du publicerar till nya databaser beräknar .dacpac publiceringsprocessen också skillnaden mellan en käll-.dacpac och en måldatabas innan du bestämmer vilka steg den behöver vidta för att uppdatera databasen. Om Table_C till exempel saknar två kolumner i databasen som den har i SQL-projektet och StoredProcedure_A har ändrats, skapar SqlPackage en ALTER TABLE-instruktion och en ALTER PROCEDURE-instruktion i stället för att blint försöka skapa en massa objekt.

Skärmbild av exempel på ALTER TABLE-sats beräknad genom distribution.

Flexibiliteten som tillhandahålls av publiceringskommandot till befintliga databaser är inte begränsad till en enda databas. En .dacpac kan distribueras flera gånger, till exempel när du uppgraderar en flotta på hundra databaser.

När du ska använda

SQL-databasprojekt passar bra för team som vill integrera databasutveckling i ett CI/CD-arbetsflöde. Sql-projekts deklarativa karaktär möjliggör en enda sanningskälla för databasschemat, och processen för att skapa och publicera ger ett repeterbart och tillförlitligt sätt att distribuera ändringar till databaser.

SQL-databasprojekt används för att spåra sanningskällan för databastillstånd, inklusive utveckling med en objektrelationsmappare (ORM) som EF Core. Antingen kan ett grafiskt verktyg eller kommandoraden användas för att extrahera schemat för en databas till ett SQL-projekt, oavsett vilken ORM som används för att skapa databasen.

Skärmbild av VS Code med AdventureWorks SQL-projektet öppet och visar en tabell i redigeraren.

SQL-databasprojekt stöder SQL Server- och Azure SQL-serien med databaser, inklusive Azure SQL Database och Azure Synapse Analytics. Oavsett om du utvecklar ett program eller ett informationslager kan SQL-databasprojekt användas för att hantera schemat för databasen. SQL-projekt kan utvecklas från verktyg i Visual Studio, VS Code och Azure Data Studio.

Ursprungliga projekt jämfört med SDK-projekt (förhandsversion)

Det ursprungliga SQL-projektformatet baseras på MSBuild (.NET Framework) och är det format som används av SQL Server Data Tools i Visual Studio. Projektformatet i SDK-format baseras på de nya SDK-projekt som introducerades i .NET Core och är det format som används av SQL Database Projects-tillägget för Azure Data Studio och VS Code. Stöd för SQL-projekt i SDK-format i Visual Studio finns på färdplan .

Nytt utvecklingsarbete bör överväga att använda SDK-format, eftersom det är det format som kommer att stödjas i framtiden. Projektformatet i SDK-format är mer flexibelt och innehåller nya funktioner som inte är tillgängliga med de ursprungliga SQL-projekten:

  • .NET 8-stöd (plattformsoberoende)
  • NuGet-paketreferenser för databasreferenser
  • Standardmönster för globbning för .sql filer i projektet

SDK-projekt har en superuppsättning funktioner från ursprungliga SQL-projekt och befintliga SQL-projekt kan konverteras till SDK-liknande projekt genom ändring av projektfilen.

Undantaget till funktionstäckningen är stöd för SQLCLR-objekt, som kräver .NET Framework. Ett projekt som innehåller SQLCLR-objekt kan konverteras till ett SDK-projekt, men projektet kräver .NET Framework och måste byggas i Visual Studio i Windows. När projektet med SQLCLR-objektet har skapats kan .dacpac distribueras med SqlPackage på .NET och .NET Framework och kan användas som en .dacpac referens i ett projekt (både samma databas eller samma server på olika databaser).