Vad är SQL-databasprojekt?
gäller för: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL-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
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.
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.
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.
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).
Relaterat innehåll
- Project-Oriented Utveckling av offline-databaser
- SQL Database Projects-tillägget
- SqlPackage
- Exempel på CI/CD-pipelines för SQL-projekt
- GitHub sql-action
- Azure DevOps SQL-utplaceringar
- program på datanivå (DAC)
- DacFx-feedbacklagringsplats
- Kom igång med SQL-databasprojekt
- Självstudie: Skapa och distribuera ett SQL-projekt