Partager via


Références de packages de projets SQL

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Les références de packages dans les projets SQL vous permettent de référencer des objets de base de données à partir d'autres projets ou de packages NuGet. Les objets de base de données ajoutés à un projet via des références de packages peuvent faire partie de la même base de données, d'une base de données différente sur le même serveur ou d'une base de données différente sur un serveur différent.

Note

Les références de package sont la méthode recommandée pour référencer les objets de la base de données dans les nouveaux développements. Le référencement de packages NuGet n’est pris en charge que dans les projets SQL de style SDK.

Références de packages d'objets de base de données

Les références de packages sont l'une des méthodes permettant d'ajouter des objets de base de données à un projet SQL en tant que référence de base de données. Les références de packages peuvent contenir des objets pour la même base de données, d'une base de données différente sur le même serveur ou d'une base de données différente sur un serveur différent. Les références de packages peuvent être utilisées pour diviser une base de données en projets plus petits et plus faciles à gérer, ce qui peut contribuer à réduire le temps nécessaire à la génération d'un projet au cours du développement local itératif.

Capture d'écran de l'exemple d'un projet SQL référençant deux packages et un projet pour les références à la base de données.

Exemple et syntaxe de fichier projet SQL

Les références de packages sont ajoutées à un projet SQL via des entrées dans le fichier .sqlproj, de la même manière que pour les projets C#. Lorsqu'une référence de package renvoie à une autre base de données sur le même serveur, un élément <DatabaseSqlCmdVariable> est inclus dans la référence du package. Lorsqu'une référence de package renvoie à une autre base de données sur un autre serveur, un élément <ServerSqlCmdVariable> est également inclus dans la référence du package. Les références de packages à la même base de données n'incluent pas d'éléments <ServerSqlCmdVariable> ou <DatabaseSqlCmdVariable>.

L'exemple suivant inclut une référence de package au package Contoso.AdventureWorks.SalesLT en tant que référence de base de données pour la même base de données où les objets du package font partie du modèle de base de données dans le projet SQL :

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

L’exemple suivant inclut une référence de package au Contoso.AdventureWorks package en tant que référence de base de données pour une autre base de données (AdventureWorks) sur le même serveur où les objets du package font partie du modèle de base de données dans le projet SQL :

...
  <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>

Dans cet exemple, le fichier AdventureWorks .dacpac est publié en tant que version Contoso.AdventureWorks de package 1.1.0 dans un flux NuGet. L’élément <DatabaseSqlCmdVariable> spécifie le nom de la base de données sur le même serveur que celui où se trouvent les objets du package et serait utilisé pour indiquer cette référence en nommage en trois parties. La variable AdventureDB est utilisée pour définir le nom de la base de données au moment du déploiement et est utilisée dans le projet de la même façon que cet exemple de requête :

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

L’élément <DacpacName> spécifie le nom du fichier de référence de package .dacpac, sans l’extension ni le chemin d’accès du fichier. L’élément <DacpacName> est facultatif et n’est requis que lorsque le nom du .dacpac fichier est différent du nom du package.

Bases de données système

Les bases de données système SQL (master, msdb) sont publiées sur NuGet.org en tant que packages de référence de base de données. Ces packages contiennent le schéma des bases de données du système et peuvent être utilisés comme références de packages dans les projets SQL. Les packages de base de données système sont versionnés pour s'aligner sur la version de SQL Server à laquelle ils sont associés. Par exemple, le package de base de données système master pour SQL Server 2022 est Microsoft.SqlServer.Dacpacs.Master version 160.2.1 et peut être ajouté à un projet SQL en tant que référence de package :

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

Les modifications de version mineures reflètent les corrections de bogues et les modifications mineures apportées au schéma d'une version de SQL Server.

Les packages de base de données système disponibles sont les suivants :

Package dacpac Packages NuGet

Un package de référence de base de données est un package NuGet qui contient un fichier .dacpac. Le package NuGet peut être publié dans un flux NuGet, tel que Azure Artifacts, pour être utilisé dans des projets SQL. La création de ce package suit le même processus que la création d'un package NuGet pour d'autres types de projets. Pour plus d'informations, consultez la section Création d'un package avec l'interface CLI dotnet.

Capture d'écran du résumé de la référence du package pour le processus des projets SQL.

Pour packager un fichier .sqlproj en tant que package NuGet, utilisez la commande dotnet pack à partir de la ligne de commande. Par défaut, la commande dotnet pack crée un package NuGet à partir du fichier .sqlproj dans le dossier bin/Debug.

Les métadonnées du package peuvent être spécifiées par des propriétés à l'intérieur de l'élément <PropertyGroup> dans le fichier .sqlproj. Par exemple, les propriétés suivantes spécifient l'ID du package, sa version, sa description, ses auteurs et sa société :

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

Le fichier .nupkg créé par la commande dotnet pack peut être publié dans un flux NuGet pour être utilisé dans des projets SQL. Ces objets de base de données peuvent être consultés par toute personne ayant accès au package. Vous devez donc prendre en compte la sélection d’un emplacement de flux public ou privé. Pour plus d'informations, consultez la section Hébergement avec des flux de packages privés.

Lorsque le package référencé a un PackageId différent du nom du fichier .dacpac, l’élément <DacpacName> est requis dans la référence du package lors de la consommation du package.

Références de package de règles d’analyse de code étendues

Les références de package peuvent également être utilisées pour référencer davantage de règles d’analyse du code qui ont été développées dans le cadre de l’extensibilité de l’analyse du code. La référence de package pour un package de règle d’analyse de code est similaire à la référence du package pour un package objet de base de données. L’exemple suivant montre une référence de package à un package de règle d’analyse de code personnalisé :

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

Le package référencé doit être disponible sur un flux NuGet, tel que NuGet.org, Azure Artifacts ou une source locale. Lorsqu’un package contenant des règles d’analyse du code est référencé, les règles sont automatiquement incluses dans le projet SQL et sont évaluées lorsque la propriété RunSqlCodeAnalysis du projet a la valeur true. Les règles peuvent être désactivées ou paramétrées pour générer une erreur individuellement dans les propriétés du projet.