Delen via


Sql Projects-pakketverwijzingen

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Met pakketverwijzingen in SQL-projecten kunt u verwijzen naar databaseobjecten uit andere projecten of NuGet-pakketten. De databaseobjecten die via pakketverwijzingen aan een project worden toegevoegd, kunnen deel uitmaken van dezelfde database, een andere database op dezelfde server of een andere database op een andere server.

Notitie

Pakketverwijzingen zijn de aanbevolen methode voor het verwijzen naar databaseobjecten in nieuwe ontwikkeling. Verwijzingen naar NuGet-pakketten worden alleen ondersteund in SQL-projecten in SDK-stijl.

Verwijzingen naar databaseobjectpakketten

Pakketverwijzingen zijn een van de verschillende methoden om databaseobjecten toe te voegen aan een SQL-project als een databaseverwijzing. Pakketverwijzingen kunnen objecten bevatten voor dezelfde database, een andere database op dezelfde server of een andere database op een andere server. Pakketverwijzingen kunnen worden gebruikt om een database op te splitsen in kleinere, beter beheerbare projecten, wat kan helpen om de tijd die nodig is om een project te bouwen tijdens iteratieve lokale ontwikkeling te verminderen.

schermopname van een voorbeeld van een SQL-project dat verwijst naar twee pakketten en één project voor databaseverwijzingen.

Voorbeeld van SQL-projectbestand en syntaxis

Pakketverwijzingen worden toegevoegd aan een SQL-project via vermeldingen in het .sqlproj-bestand, vergelijkbaar met C#-projecten. Wanneer een pakketreferentie naar een andere database op dezelfde server is, wordt een <DatabaseSqlCmdVariable> element opgenomen in de pakketreferentie. Wanneer een pakketreferentie naar een andere database op een andere server is, wordt er ook een <ServerSqlCmdVariable> element opgenomen in de pakketreferentie. Pakketverwijzingen naar dezelfde database bevatten geen <ServerSqlCmdVariable> of <DatabaseSqlCmdVariable> elementen.

Het volgende voorbeeld bevat een pakketreferentie naar het Contoso.AdventureWorks.SalesLT-pakket als databasereferentie voor dezelfde database waarin de objecten in het pakket deel uitmaken van het databasemodel in het SQL-project:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
  </ItemGroup>
</Project>

Het volgende voorbeeld bevat een pakketreferentie naar het Contoso.AdventureWorks-pakket als databasereferentie voor een andere database (AdventureWorks) op dezelfde server waar de objecten in het pakket deel uitmaken van het databasemodel in het SQL-project:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks" Version="1.1.0">
      <DatabaseSqlCmdVariable>AdventureDB</DatabaseSqlCmdVariable>
      <DacpacName>AdventureWorks</DacpacName>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <SqlCmdVariable Include="AdventureDB">
      <DefaultValue>AdventureWorks</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

In dit voorbeeld wordt het bestand AdventureWorks .dacpac gepubliceerd als een pakket Contoso.AdventureWorks versie 1.1.0 naar een NuGet-feed. Het element <DatabaseSqlCmdVariable> geeft de naam van de database op dezelfde server op waar de objecten in het pakket zich bevinden en wordt gebruikt om deze verwijzing in drie delen aan te geven. De SQLCMD-variabeleAdventureDB wordt gebruikt voor het instellen van de databasenaam tijdens de implementatie en wordt gebruikt in het project, vergelijkbaar met deze voorbeeldquery:

SELECT * FROM [$(AdventureDB)].dbo.Customers;

Het element <DacpacName> geeft de naam van het .dacpac-bestand op voor de pakketverwijzing, zonder de bestandsextensie of het pad. Het element <DacpacName> is optioneel en is alleen vereist wanneer de naam van het bestand .dacpac verschilt van de naam van het pakket.

Systeemdatabases

De SQL-systeemdatabases (master, msdb) worden gepubliceerd op NuGet.org als databasereferentiepakketten. Deze pakketten bevatten het schema voor de systeemdatabases en kunnen worden gebruikt als pakketverwijzingen in SQL-projecten. De systeemdatabasepakketten zijn geversied om te worden afgestemd op de versie van SQL Server waaraan ze zijn gekoppeld. Het master systeemdatabasepakket voor SQL Server 2022 is bijvoorbeeld Microsoft.SqlServer.Dacpacs.Master versie 160.2.1 en kan als pakketreferentie aan een SQL-project worden toegevoegd:

...
  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
  </ItemGroup>
</Project>

Kleine versiewijzigingen weerspiegelen bugfixes en kleine wijzigingen in het schema in een SQL Server-versie.

De beschikbare systeemdatabasepakketten zijn:

Pakket dacpac NuGet-pakketten

Een databasereferentiepakket is een NuGet-pakket dat een .dacpac-bestand bevat. Het NuGet-pakket kan worden gepubliceerd naar een NuGet-feed, zoals Azure Artifacts, voor gebruik in SQL-projecten. Het maken van dit pakket volgt hetzelfde proces als het maken van een NuGet-pakket voor andere typen projecten. Zie Een pakket maken met de dotnet CLIvoor meer informatie.

Schermopname van samenvatting van pakketreferentie voor sql-projecten.

Als u een .sqlproj-bestand als een NuGet-pakket wilt verpakken, gebruikt u de opdracht dotnet pack vanaf de opdrachtregel. De opdracht dotnet pack maakt standaard een NuGet-pakket op basis van het .sqlproj-bestand in de map bin/Debug.

Pakketmetagegevens kunnen worden opgegeven door eigenschappen in het <PropertyGroup> element in het .sqlproj bestand. Met de volgende eigenschappen geeft u bijvoorbeeld de pakket-id, versie, beschrijving, auteurs en bedrijf op:

<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>

Het .nupkg-bestand dat is gemaakt door de opdracht dotnet pack kan worden gepubliceerd naar een NuGet-feed voor gebruik in SQL-projecten. Deze databaseobjecten kunnen door iedereen met toegang tot het pakket worden bekeken. Daarom moet u rekening houden met het selecteren van een openbare of privéfeedlocatie. Zie Hosting met privépakketfeedsvoor meer informatie.

Wanneer u verwijst naar een pakket waarin de PackageId verschilt van de naam van het .dacpac-bestand, is het <DacpacName>-element vereist in de pakketverwijzing bij het gebruik van het pakket.

Pakketverwijzingen voor uitgebreide codeanalyseregels

Pakketverwijzingen kunnen ook worden gebruikt om te verwijzen naar meer codeanalyseregels die zijn ontwikkeld als onderdeel van uitbreidbaarheid van codeanalyse. De pakketverwijzing voor een codeanalyseregelpakket is vergelijkbaar met de pakketverwijzing voor een databaseobjectpakket. In het volgende voorbeeld ziet u een pakketreferentie naar een aangepast codeanalyseregelpakket:

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

Het pakket waarnaar wordt verwezen, moet beschikbaar zijn op een NuGet-feed, zoals NuGet.org, Azure Artifacts of een lokale bron. Wanneer naar een pakket met codeanalyseregels wordt verwezen, worden de regels automatisch opgenomen in het SQL-project en geëvalueerd wanneer de projecteigenschap RunSqlCodeAnalysis is ingesteld op waar. De regels kunnen worden uitgeschakeld of verhoogd om een fout afzonderlijk in de projecteigenschappen te retourneren.