Partager via


Utilisation de références dans les projets de base de données

Vous pouvez ajouter plusieurs types de références aux projets de base de données pour gérer des situations différentes. Les procédures que vous suivez varient sensiblement selon les types de références.

Le tableau suivant décrit les types de références que vous pouvez ajouter et les situations correspondant à chaque type.

Type référence

Quand l'utiliser

Un projet de base de données (.dbproj) dans la solution actuelle

Vous ajoutez ce type de référence pour activer plusieurs scénarios.

  • Vous pouvez faire référence à un objet de base de données dans un projet depuis un autre projet, en ajoutant la référence et en définissant une variable pour le nom du serveur (facultatif) et une variable pour le nom de la base de données qui contient l'objet. Vous utilisez ces références entre bases de données si votre base de données fait référence à des objets contenus dans d'autres bases de données. Pour plus d'informations, consultez Démarrage du développement en équipe de bases de données faisant référence à d'autres bases de données.

Si vous ajoutez une référence à un autre projet mais ne définissez pas de variables, vous créez un projet composite. Lorsque vous déployez ce type de projet, vous déployez également les objets dans d'autres projets. Pour plus d'informations, consultez Création de projets composites à l'aide de références plus loin dans cette rubrique.

La sortie d'un projet de base de données (fichier .dbschema), de la solution actuelle ou d'une autre solution

Si vous devez faire référence aux objets contenus dans une autre base de données, mais souhaitez isoler cette base de données d'autres développeurs, vous ajoutez une référence au fichier de schéma de la base de données. Il convient d'adopter cette approche si vous souhaitez empêcher l'apport de modifications ou ne pouvez pas mettre à jour la base de données. Par exemple, vous pouvez ajouter une référence à un fichier .dbschema si votre projet de base de données doit faire référence à des noms de connexion ou à des clés partagés et définis sur le serveur mais utilisés dans plusieurs projets de base de données. Pour plus d'informations, consultez Démarrage du développement en équipe de bases de données faisant référence à des objets serveur partagés.

Vous pouvez référencer un fichier .dbschema qui contient les définitions de vos objets serveur et vous abstenir de vérifier les paramètres sur le serveur lorsque vous déployez votre projet de base de données. Dans ce cas de figure, vous pouvez ajouter une référence au fichier master.dbschema et définir un littéral pour la variable de base de données dont la valeur est « MASTER ». Ce faisant, les références aux objets définis dans la base de données « MASTER » peuvent être résolues sans erreurs. Pour plus d'informations sur les littéraux, consultez Référencement de bases de données à l'aide de littéraux plus loin dans cette rubrique.

Un fichier master.dbschema qui contient les définitions d'objets système

Si vous souhaitez référencer des objets système tels que des procédures stockées, tables, vues ou catalogues, vous devez ajouter une référence au fichier master.dbschema approprié pour résoudre ces références. Par exemple, vous pouvez référencer sys.sysobjects dans une procédure stockée. Un fichier master.dbschema est fourni avec Visual Studio Premium pour chaque version prise en charge de SQL Server. Vous pouvez rechercher les fichiers .dbschema dans [Programmes]\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\Version\DBSchemas, où Version est la version de SQL Server que vous utilisez (par exemple, 2005 ou 2008).

Dans ce cas de figure, vous pouvez ajouter une référence au fichier master.dbschema approprié et définir un littéral pour la variable de base de données dont la valeur est « MASTER ». Ce faisant, les références aux objets définis dans la base de données « MASTER » peuvent être résolues sans erreurs. Pour plus d'informations sur les littéraux, consultez Référencement de bases de données à l'aide de littéraux plus loin dans cette rubrique.

Un projet CLR SQL dans la solution actuelle

Il convient de référencer un projet SQLCLR dans la solution actuelle si vous développez un ou plusieurs objets SQLCLR que vous souhaitez déployer avec votre projet de base de données. Lorsque vous déployez le projet de base de données, vous déployez également l'assembly générée par le projet SQLCLR auquel vous faites référence. L'instruction CREATE ASSEMBLY est générée à partir des propriétés que vous spécifiez pour cette référence. Pour plus d'informations, consultez Démarrage du développement en équipe de bases de données faisant référence à des objets SQLCLR et Utilisation de références entre bases de données plus loin dans cette rubrique.

Un assembly SQLCLR, à partir d'un projet dans la solution actuelle ou à partir d'une autre source

Vous ajoutez une référence à un assembly SQLCLR si votre projet de base de données doit faire référence aux objets définis dans cet assembly, mais qui ne sont pas développés en même temps ou par la même équipe. Lorsque vous déployez le projet de base de données, vous déployez également l'assembly auquel vous faites référence.

Une définition de schéma XML, comme indiqué dans un fichier .xsd

Vous devez enregistrer un schéma avant de pouvoir l'associer à une variable, un paramètre ou une colonne pour créer des variables, des paramètres et des colonnes de type XML. Vous pouvez utiliser des éléments de type XML si l'une des conditions suivantes est remplie :

  • Vous disposez de schémas pour vos données XML et vous souhaitez que le serveur valide ces données d'après les schémas.

  • Vous souhaitez optimiser le stockage et les requêtes basés sur des informations de type.

  • Vous souhaitez tirer parti des informations de type lorsque vos requêtes sont compilées.

Pour plus d'informations, consultez Démarrage du développement en équipe de bases de données qui utilisent des collections de schémas XML.

Définition de références entre bases de données

Si vous créez ou importez des objets de base de données qui font référence à des objets contenus dans d'autres bases de données, vous devez définir une référence correspondante dans les propriétés de votre projet de base de données. Pour chaque base de données à laquelle vous faites référence, vous pouvez définir des variables SETVAR qui correspondent au serveur et à la base de données auxquels vous souhaitez faire référence. Lorsque vous modifiez une définition d'objet pour inclure la référence, vous pouvez définir celle-ci en utilisant ces variables au lieu des noms explicites du serveur et de la base de données. Lorsque vous générez le projet de base de données, les variables sont remplacées par les valeurs que vous avez spécifiées.

Scénarios de références entre bases de données

Visual Studio Premium prend en charge les scénarios suivants :

  • Vous avez créé un projet de base de données et importé le schéma d'une base de données existante. Le schéma contient des objets qui font référence à des objets d'une ou de plusieurs autres bases de données. Dans les propriétés du projet, vous définissez une référence correspondante et remplacez les noms explicites du serveur et de la base de données avec les variables SETVAR. Cette définition permet que les références entre bases de données soient validées au moment de la conception. Vous pouvez également déployer le projet de base de données dans un environnement de développement isolé où le nom du serveur cible peut être différent du nom du serveur cible dans votre environnement de production.

  • Vous avez un projet de base de données qui contient des références entre bases de données, et ces références utilisent des variables SETVAR pour identifier des serveurs et des bases de données. Vous souhaitez modifier les noms de ces variables et mettre à jour les définitions d'objet qui contiennent ces références.

  • Vous souhaitez faire référence à d'autres schémas de base de données du projet de base de données que vous développez. Vous souhaitez partager avec l'équipe uniquement ces schémas, et non les autres projets de base de données. Vous pouvez ajouter une référence aux fichiers de schéma (.dbschema) de base de données pour ces autres projets et archivez uniquement les fichiers de schéma dans le contrôle de version. En adoptant cette approche, vous pouvez restreindre l'accès aux projets de base de données qui contiennent les schémas auxquels vous souhaitez faire référence. Vous devez également utiliser cette approche si vous souhaitez déployer un projet de base de données mais pas les projets qui en dépendent.

Vous pouvez utiliser la refactorisation de base de données pour effectuer des tâches supplémentaires avec les références entre bases de données. Pour plus d'informations, consultez Comment : renommer les références à un serveur ou une base de données.

Références aux projets de base de données et aux fichiers de schéma

Lorsque vous ajoutez une référence dans un projet de base de données, vous pouvez spécifier un autre projet de base de données ou fichier de schéma qui est créé quand vous générez un projet de base de données.

Vous devez faire référence à un autre projet de base de données si la condition suivante est remplie :

  • Vous devez modifier les schémas de la base de données qui contiendra la référence et de celle à laquelle vous faites référence. Lorsque vous déployez le projet de base de données qui contient la référence, vous déploierez également le projet de base de données auquel vous faites référence.

Vous devez faire référence à un fichier de schéma si l'une des conditions suivantes est remplie :

  • Vous devez faire référence à une base de données dont le projet ne se trouve pas dans la solution actuelle.

  • Vous devez déployer uniquement un projet sans les projets dont il dépend.

  • Vous faites référence à un schéma de base de données qui ne changera probablement pas. Dans ce cas de figure, vous pouvez archiver le fichier de schéma dans le contrôle de version.

Limitations relatives aux références entre bases de données

Lorsque vous importez un schéma de base de données, les références à d'autres bases de données dans les définitions d'objet produisent des avertissements parce que le projet de base de données ne peut pas valider ces références avant le déploiement. Après avoir défini des références à des base de données dans les propriétés du projet, vous pouvez valider les définitions d'objet et résoudre les avertissements. Vous pouvez ensuite mettre à jour les définitions d'objet en remplaçant les noms de serveurs et de bases de données par des variables. Vous pouvez également utiliser la refactorisation pour exécuter cette substitution. Pour plus d'informations, consultez Comment : ajouter des références à des projets de base de données et Comment : renommer les références à un serveur ou une base de données.

Les variables et valeurs pour les serveurs et bases de données auxquels vous faites référence ne sont pas spécifiques à une configuration de build. Pour spécifier le serveur et la base de données à une invite de commandes, vous devez les référencer sous forme de variables MSBuild qui peuvent être substituées au moment du déploiement.

Les limitations suivantes s'appliquent également :

  • Vous pouvez ajouter une référence à une base de données uniquement si elle est associée à un projet de base de données correspondant.

  • Vous devez générer un projet de base de données avant de pouvoir ajouter une référence au fichier de schéma pour ce projet de base de données.

  • Vous devez générer les projets de base de données auxquels vous faites référence afin que les références entre bases de données correspondantes se résolvent sans avertissements.

  • Si vous modifiez la configuration de build de la solution ou des projets de base de données auxquels vous faites référence, vous devrez peut-être régénérer la solution afin que les références entre bases de données correspondantes se résolvent sans avertissements.

  • Si vous faites référence à un objet d'un projet de base de données situé sur un autre serveur, vous devez définir celui-ci comme un serveur lié sur votre serveur cible. Pour plus d'informations, consultez Comment : ajouter des références à des projets de base de données.

  • Il est inutile de recourir à une référence entre bases de données pour faire référence à la base de données master.

  • Les références qui incluent des variables SETVAR doivent toujours avoir la forme" [$ (NomVariable)] ". Si vous omettez les crochets, vous risquez de ne pas pouvoir déployer le projet de base de données.

  • Les noms de variables SETVAR doivent être uniques. Si votre serveur a le même nom que votre base de données, vous devez définir des variables qui ont des noms différents, mais dont la résolution aboutit à la même valeur.

Considérations relatives à la sécurité

Le fichier de schéma qui est créé lorsque vous générez un projet de base de données contient les informations de schéma pour ce projet. Vous devez limiter l'accès au fichier de schéma pour protéger ces informations. Vous pouvez partager des fichiers de schéma avec votre équipe en les archivant dans le contrôle de version, au lieu de les déployant sur le serveur cible. Si le projet de base de données pour la base de données à laquelle vous faites référence se trouve dans la même solution, d'autres développeurs travaillant sur le projet y auront accès lorsqu'ils effectueront la synchronisation avec le contrôle de version et génèreront la solution.

Exemple de référence entre bases de données

Si vous créez deux projets de base de données, ReportDb et DependentDb, il convient peut-être de faire référence aux objets de DependentDb depuis la base de données ReportDb. Pour ce faire, commencez par ajouter une référence dans les propriétés du projet de base de données DependentDb et à définir les variables comme suit :

  • RefServer

  • RefDatabase

La valeur de RefServer est le nom du serveur sur lequel DependentDb réside. La valeur de RefDatabase est le nom de la base de données cible qui est déployée par le projet DependentDb. Dans cet exemple, RefServer a la valeur StageSvr et RefDatabase la valeur DepDb.

Vous pourriez ajouter une vue à ReportDb qui présente toutes les colonnes de la table Employee contenue dans la base de données DependentDb. Vous déployez la table dans la base de données nommée DepDb sur le serveur nommé StageSvr. Vous créez ensuite la définition d'objet pour cette vue en ajoutant les instructions suivantes :

CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;

Création de projets composites à l'aide de références

Les projets de base de données et serveur ne peuvent pas englober toutes les situations que vous pouvez rencontrer pendant le développement de base de données. Pour représenter des scénarii plus complexes, vous pouvez créer des projets composites à partir de deux autres projets ou plus.

Vous créez un projet composite en ajoutant, dans un projet de base de données, une référence à un autre projet de base de données ou serveur, sans fournir de valeurs pour les variables de base de données et de serveur dans les projets auxquels vous faites référence. Lorsque vous ajoutez ce type de référence, le projet auquel vous avez ajouté la référence contient tous les objets et paramètres du projet vers lequel point la référence.

En créant un projet composite, les scénarii suivants sont possibles :

  • Vous pouvez gérer des schémas de base de données qui font référence à des noms de connexion ou clés partagés. Pour plus d'informations, consultez Démarrage du développement en équipe de bases de données faisant référence à des objets serveur partagés.

  • Vous pouvez décomposer une importante base de données en sous-projets pour en améliorer les performances, ou séparer les schémas ou les types d'objet. Vous pouvez également apporter cette modification si plusieurs bases de données partagent des objets, mais diffèrent sous d'autres angles. Vous pouvez scinder un projet en deux sous-projets ou plus uniquement si cette modification ne crée pas de référence circulaire.

Lorsque vous déployez le projet composite, vous déployez également les objets dans tous les projets de base de données auxquels il fait référence. Pour plus d'informations, consultez Démarrage du développement en équipe de bases de données volumineuses.

Référencement d'une base de données à l'aide de littéraux

Vous pouvez définir des variables de référence de base de données pour spécifier le nom d'une base de données référencée dans votre environnement de déploiement cible. Si vous ne souhaitez pas utiliser des variables SQLCMD, parce que le nom de la base de données cible est toujours le même dans votre environnement de déploiement, vous pouvez à la place définir un littéral dont la valeur est le nom de la base de données référencée.

Si vous utilisez des variables, votre syntaxe peut s'afficher comme suit :

CREATE VIEW [dbo].[View1] AS SELECT * FROM [($MasterDbVar)].[dbo].[spt_values].

Si, à la place, vous utilisez un littéral, votre syntaxe peut être la suivante :

CREATE VIEW [dbo].[View1] AS SELECT * FROM [master].[dbo].[spt_values]

Pour plus d'informations sur la définition d'une valeur de littéral, consultez Comment : ajouter des références à des projets de base de données.

Voir aussi

Tâches

Comment : renommer les références à un serveur ou une base de données

Comment : ajouter des références à des projets de base de données

Concepts

Création et modification des objets de base de données et serveur