Partager via


Vue d’ensemble des références de base de données

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Base de données SQL dans Microsoft Fabric

Les références de bases de données dans les projets SQL vous permettent d'incorporer des objets qui ne sont pas inclus dans un projet en établissant un lien vers un autre projet, un fichier .dacpac ou un package NuGet publié. Les objets de base de données ajoutés à un projet 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. Pour le développement de SQL Server, les références de base de données peuvent être utilisées pour établir un lien avec une autre base de données sur le même serveur pour la dénomination en trois parties, ou pour établir un lien avec une autre base de données sur un autre serveur pour les requêtes inter-bases de données. Pour les bases de données comportant un grand nombre d'objets dans des groupes distincts, les références de base de données peuvent être utilisées pour diviser une base de données en projets plus petits et plus faciles à gérer. La réduction de la taille des projets peut contribuer à améliorer les performances et à réduire le temps nécessaire à l'élaboration 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 un dacpac, un package nuget et un projet pour les références de bases de données.

Remarque

Les références de projets et les références de packages NuGet sont les méthodes recommandées pour les références de bases de données dans le cadre d'un nouveau développement. Le référencement des packages NuGet n'est pas supporté par les projets SQL d'origine.

Exemple et syntaxe de fichier projet SQL

Les références aux bases de données sont incluses dans un projet 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 base de données renvoie à une autre base de données sur le même serveur, un élément <DatabaseSqlCmdVariable> est inclus dans la référence du projet. Lorsqu'une référence de base de données renvoie à une autre base de données sur serveur différent, un élément <ServerSqlCmdVariable> est également inclus dans la référence du projet. Les références de base de données à la même base de données n'incluent pas d'éléments <ServerSqlCmdVariable> ou <DatabaseSqlCmdVariable>.

L'inclusion d'une référence spécifique à la base de données dans les scripts SQL utilise les variables SQLCMD nommées dans le fichier projet pour spécifier le nom de la base de données. Par exemple, le script SQL suivant fait référence à une table de la base de données Warehouse :

SELECT ProductId, StorageLocation, BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory]

Une référence de base de données correspondant à la variable $(Warehouse) SQLCMD est incluse dans le fichier projet et contient <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.

Références de projets

Dans cet exemple, une référence de projet est ajoutée à un projet SQL AdventureWorksSalesLT.sqlproj qui fait partie de la même base de données.

  <ItemGroup>
    <ProjectReference Include="..\AdventureWorks\AdventureWorksSalesLT.sqlproj">
      <Name>AdventureWorksSalesLT</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <Private>True</Private>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
    </ProjectReference>
  </ItemGroup>

Références de packages Dacpac

Pour plus d'informations sur les références de packages dans les projets SQL, consultez l'article sur les références de packages dans les projets SQL.

Une référence de package à la base de données système master pour SQL 2022 est présentée dans l'exemple suivant :

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

Références d’artefact Dacpac

Les références directes à un fichier d'artefact .dacpac ne sont pas recommandées pour les nouveaux développements dans les projets de style SDK. Utilisez plutôt les références de packages NuGet.

Dans les projets SQL d'origine, les références au fichier .dacpac sont spécifiées dans le fichier .sqlproj à l'aide d'un élément <ArtifactReference>. L'exemple suivant montre une référence d'artefact .dacpac à un fichier .dacpac dans un projet différent sur le même serveur :

  <ItemGroup>
    <ArtifactReference Include="..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac">
      <HintPath>..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac</HintPath>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>
    </ArtifactReference>
  </ItemGroup>

Ajouter et utiliser des références de projet

Ajouter une référence au projet

Pour ajouter une référence de projet à un projet SQL dans Visual Studio, cliquez avec le bouton droit sur le nœud Références sous le projet dans l'Explorateur de solutions et sélectionnez Ajouter une référence de base de données.

Capture d'écran de la boîte de dialogue Visual Studio pour les références de bases de données.

La boîte de dialogue Ajouter une référence à la base de données présente des options permettant d'ajouter une référence à la base de données :

  • un projet SQL à partir de la même solution
  • une base de données système (à partir des fichiers .dacpac automatiquement inclus dans Visual Studio)
  • tout fichier d'application de la couche données (.dacpac) sur le système de fichiers local

La boîte de dialogue fournit également une liste déroulante permettant de sélectionner les emplacements de référence suivants :

  • même base de données
  • base de données différente, même serveur
  • base de données différente, serveur différent

Pour ajouter une référence de projet à un projet SQL, ajoutez un élément <ItemGroup> au fichier .sqlproj avec un élément de référence approprié pour chaque référence de base de données. Par exemple, la référence de projet suivante est ajoutée à un projet SQL pour référencer le projet WorldWideImporters dans une base de données différente sur un serveur différent :

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

La référence du projet est utilisée dans un exemple de définition de vue dans le projet SQL :

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

Pour ajouter une référence de base de données à un projet SQL dans l'extension Projets de bases de données SQL, cliquez avec le bouton droit sur le nœud Références de bases de données sous le projet dans la vue Projets de bases de données et sélectionnez Ajouter une référence de base de données.

Capture d'écran de la boîte de dialogue d'ajout de référence dans Azure Data Studio.

Les types de référence disponibles sont les suivants :

  • base de données système
  • application de la couche données (.dacpac)
  • publié une application de la couche données (.nupkg)
  • projet

L'extension invite également à sélectionner l'un des emplacements de référence suivants :

  • même base de données
  • base de données différente, même serveur
  • base de données différente, serveur différent

Pour ajouter une référence de projet à un projet SQL, ajoutez un élément <ItemGroup> au fichier .sqlproj avec un élément de référence approprié pour chaque référence de base de données. Par exemple, la référence de projet suivante est ajoutée à un projet SQL pour référencer le projet WorldWideImporters dans une base de données différente sur un serveur différent :

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

La référence du projet est utilisée dans un exemple de définition de vue dans le projet SQL :

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

Générer avec des références de projet

La génération d'un projet SQL avec des références de base de données peut nécessiter une configuration supplémentaire pour s'assurer que les objets référencés sont disponibles au cours du processus de génération. Par exemple, si un projet est généré dans un pipeline d'intégration continue (CI), l'environnement de l'agent de génération doit être configuré de la même manière que l'environnement de développement local.

  • Les références .dacpac dans le projet SQL exigent que le .dacpac soit présent sur l'agent de génération au même chemin d'accès relatif que celui spécifié dans le fichier projet.
  • les références de projet dans le projet SQL exigent que le projet référencé soit présent sur l'agent de génération au même chemin d'accès relatif que celui spécifié dans le fichier projet et qu'il puisse être généré avec succès sur l'agent de génération.
  • Les références de bases de données système créées dans des projets SQL d'origine dans Visual Studio nécessitent que l'agent de génération ait installé Visual Studio.
  • Les références de packages NuGet dans le projet SQL nécessitent la publication du package dans un flux NuGet qui est également défini comme source de package pour l'agent de génération.

Publier avec des références de projet

La publication d'un .dacpac généré à partir d'un projet avec des références de base de données ne nécessite aucune étape supplémentaire. Le fichier .dacpac contient les objets référencés et les variables SQLCMD spécifiées dans le fichier projet.

Pour les références de base de données aux objets de la même base de données, les objets du projet référencé sont inclus dans le fichier .dacpac mais ne sont pas inclus dans le déploiement par défaut. Pour inclure les objets dans le déploiement, utilisez l'option /p:IncludeCompositeObjects=true de l'outil en ligne de commande SqlPackage. Par exemple, la commande suivante déploie le projet AdventureWorks avec l'option /p:IncludeCompositeObjects=true pour inclure les objets des références de la base de données à AdventureWorks :

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true

Lorsque vous déployez un fichier .dacpac contenant des références de bases de données vers différentes bases de données (sur le même serveur ou sur un serveur différent), les variables SQLCMD spécifiées dans le fichier projet doivent être définies avec les valeurs correctes pour l'environnement cible. La définition des valeurs des variables SQLCMD pendant le déploiement se fait avec l'option /v de l'outil en ligne de commande SqlPackage. Par exemple, la commande suivante définit la variable WorldWideImporters sur WorldWideImporters et la variable WWIServer sur localhost :

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost