Delen via


Wat zijn SQL-databaseprojecten?

Van toepassing op: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Een SQL-databaseproject is een lokale weergave van SQL-objecten die deel uitmaken van het schema voor één database, zoals tabellen, opgeslagen procedures of functies. Met de ontwikkelingscyclus van een SQL-databaseproject kan databaseontwikkeling worden geïntegreerd in een CI/CD-werkstroom (continue integratie en continue implementatie) die bekend zijn als een aanbevolen procedure voor ontwikkeling.

Overzicht

SQL-projecten zijn gebaseerd op declaratieve T-SQL-instructies. In de projectcode van uw SQL-database maakt u elk object één keer. Als u iets wilt wijzigen over dat object, zoals het toevoegen van kolommen of het wijzigen van een gegevenstype, wijzigt u het enkelvoudige bestand dat het object voor de eerste en enige keer declareert.

Wanneer een SQL-databaseproject is gebouwd, is het uitvoerartefact een .dacpac-bestand. Nieuwe en bestaande databases kunnen worden bijgewerkt zodat deze overeenkomen met de inhoud van de .dacpac door de .dacpac te publiceren naar een doeldatabase.

Het framework voor SQL-databaseprojecten rond uw databasecode waarmee twee basismogelijkheden aan die set bestanden worden toegevoegd met het buildproces:

  • Validatie van verwijzingen tussen objecten en van de syntaxis tegen een specifieke versie van SQL
  • Implementeren van het build-artefact op nieuwe of bestaande databases

Schermopname van samenvatting van SQL Database-projecten met scripts vóór implementatie en na implementatie, evenals databaseobjecten.

De functionaliteit voor SQL-databaseprojecten wordt geleverd door de Microsoft.SqlServer.DacFx .NET-bibliotheek en wordt weergegeven in verschillende hulpprogramma's voor SQL-ontwikkeling. DacFx heeft meerdere uitbreidbaarheidspunten, zoals het wijzigen van implementatiestappen en de mogelijkheid om aangepaste regels te maken voor codeanalyse. De project-SDK voor SQL-projecten is Microsoft.Build.Sql, momenteel beschikbaar in preview en geadviseerd voor nieuwe ontwikkeling.

Validering

Wanneer een SQL-project wordt gebouwd, worden de relaties tussen objecten gevalideerd. Een weergavedefinitie kan bijvoorbeeld geen tabel of kolommen bevatten die niet bestaan in het SQL-project.

Daarnaast bevat een SQL-project een eigenschap in het .sqlproj-bestand met de naam "doelplatform". Deze informatie wordt gebruikt tijdens het buildproces om te valideren dat de functies en T-SQL-syntaxis in die versie van SQL bestaan. De JSON-functies die zijn toegevoegd in SQL Server 2022, kunnen bijvoorbeeld niet worden gebruikt in een SQL-project dat is ingesteld op het sql140-doelplatform (SQL Server 2017).

Om een SQL-project te bouwen, voeren we dotnet build uit vanaf de opdrachtregel. In grafische hulpprogramma's die ONDERSTEUNING bieden voor SQL-projecten (Azure Data Studio, VS Code en Visual Studio), is er een menu-item om het SQL-project te bouwen.

De console-uitvoer van het buildproces kan fouten (buildfout) of waarschuwingen bevatten. Buildwaarschuwingen kunnen inconsequent gebruik van hoofdletters bevatten in objectnamen en andere aanpasbare best practices, maar leiden niet tot een mislukte build.

De artefactuitvoer van het buildproces is een .dacpac-bestand, dat kan worden gevonden voor een build met standaardinstellingen in de map bin/Debug.

Implementatie

Het uitvoerbestand, de .dacpac, is een krachtig, herbruikbaar en declaratief artefact. Met dit bestand kunnen we SqlPackage of andere hulpprogramma's gebruiken om onze databasecode toe te passen op een database. De opdracht SqlPackage voor het implementeren van een .dacpac is de opdracht publiceren.

Schermopname van overzicht van proces van SQL-projectbuild naar dacpac en implementeren in database.

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

Nieuwe databases

SqlPackage navigeert door de objectrelaties om elk object in de juiste volgorde te maken bij het publiceren van een dacpac naar een nieuwe database. SqlPackage maakt bijvoorbeeld Table_A aan voordat Table_B wanneer Table_B een buitenlandse sleutel heeft naar Table_A.

U wilt geen hele map met SQL-scripts uitvoeren, met name wanneer u SQL-projecten zou kunnen gebruiken die elke T-SQL-sectie automatisch in de juiste volgorde uitvoeren op basis van objectrelaties.

Bestaande databases

Naast het navigeren in de objecthiërarchie bij het publiceren naar nieuwe databases, berekent het .dacpac publicatieproces ook het verschil tussen een bron-.dacpac en een doeldatabase voordat wordt bepaald welke stappen er moeten worden uitgevoerd om die database bij te werken. Als Table_C bijvoorbeeld twee kolommen mist in de database die het in het SQL-project heeft en StoredProcedure_A is gewijzigd, maakt SqlPackage een ALTER TABLE-instructie en een ALTER PROCEDURE instructie in plaats van blind een aantal objecten te maken.

Schermopname van voorbeeldinstructie voor het wijzigen van een tabel, berekend door de implementatie.

De flexibiliteit van de publicatieopdracht voor bestaande databases is niet beperkt tot één database. Eén .dacpac kan meerdere keren worden geïmplementeerd, bijvoorbeeld bij het upgraden van een vloot van honderd databases.

Wanneer gebruikt u

SQL-databaseprojecten zijn geschikt voor teams die databaseontwikkeling willen integreren in een CI/CD-werkstroom. De declaratieve aard van SQL-projecten biedt één bron van waarheid voor het databaseschema en het build- en publicatieproces biedt een herhaalbare en betrouwbare manier om wijzigingen in databases te implementeren.

SQL-databaseprojecten worden gebruikt om de bron van waarheid bij te houden voor de databasestatus, inclusief ontwikkeling met een object-relationele mapper (ORM), zoals EF Core. Een grafisch hulpprogramma of de opdrachtregel kan worden gebruikt om het schema van een database te extraheren naar een SQL-project, ongeacht de ORM die wordt gebruikt om de database te maken.

Schermopname van VS Code met AdventureWorks SQL-project geopend, waarin een tabel in de editor wordt weergegeven.

SQL-databaseprojecten ondersteunen de SQL Server- en Azure SQL-familie van databases, waaronder Azure SQL Database en Azure Synapse Analytics. Of u nu een toepassing of een datawarehouse ontwikkelt, SQL-databaseprojecten kunnen worden gebruikt om het schema van uw database te beheren. SQL-projecten kunnen worden ontwikkeld vanuit hulpprogramma's in Visual Studio, VS Code en Azure Data Studio.

Oorspronkelijke projecten versus SDK-projecten (preview)

De oorspronkelijke SQL-projectindeling is gebaseerd op MSBuild (.NET Framework) en is de indeling die wordt gebruikt door SQL Server Data Tools in Visual Studio. De sdk-projectindeling is gebaseerd op de nieuwe SDK-projecten die zijn geïntroduceerd in .NET Core en is de indeling die wordt gebruikt door de extensie SQL Database Projects voor Azure Data Studio en VS Code. Ondersteuning voor SQL-projecten in de SDK-stijl in Visual Studio staat op de roadmap.

Nieuwe ontwikkelwerkzaamheden moeten overwegen om de sdk-projectindeling te gebruiken, omdat dit de indeling is die in de toekomst wordt ondersteund. De indeling van het SDK-project is flexibeler en bevat nieuwe functies die niet beschikbaar zijn voor de oorspronkelijke SQL-projecten:

  • .NET 8-ondersteuning (platformoverschrijdend)
  • NuGet pakketverwijzingen voor databaseverwijzingen
  • Standaardpatroon voor globbing voor .sql bestanden in het project

SDK-projecten hebben een superset van functionaliteit van oorspronkelijke SQL-projecten en bestaande SQL-projecten kunnen worden geconverteerd naar SDK-projecten via wijziging van het projectbestand.

De uitzondering op de functionaliteitsdekking is ondersteuning voor SQLCLR-objecten, waarvoor .NET Framework is vereist. Een project dat SQLCLR-objecten bevat, kan worden geconverteerd naar een SDK-project, maar voor het project is .NET Framework vereist en moet worden gebouwd in Visual Studio in Windows. Zodra het project met het SQLCLR-object is gebouwd, kan de .dacpac worden geïmplementeerd met SqlPackage op .NET en .NET Framework en kan worden gebruikt als een .dacpac verwijzing in een project (zowel dezelfde database als dezelfde server verschillende database).