Compartir a través de


Introducción a las referencias entre bases de datos

Actualización: noviembre 2007

Puede crear o importar objetos de base de datos que hacen referencia a los objetos de otras bases de datos. Estas referencias de bases de datos cruzadas requieren que defina una referencia correspondiente en las propiedades de su proyecto de base de datos. Si hace referencia a los objetos de otras bases de datos pero no define las referencias correspondientes en el proyecto, aparecerán advertencias. Para cada base de datos a la que hace referencia, puede definir variables SETVAR que correspondan al servidor y a la base de datos a la que desea hacer referencia. Al modificar una definición de objeto para incluir la referencia, puede definirla mediante estas variables en lugar de los nombres explícitos del servidor y la base de datos. Al generar el proyecto de base de datos, los valores que especificó reemplazan a las variables.

Nota:

Para hacer referencias de bases de datos cruzadas específicas en una configuración de compilación determinada, debe definir las variables SETVAR de dichas referencias en términos de variables de MSBuild. Por ejemplo, puede utilizar un conjunto de variables de MSBuild al generar e implementar un proyecto de base de datos en un servidor temporal y otro conjunto al generar e implementar el mismo proyecto en un servidor de producción. Si define las variables SETVAR para una referencia de base de datos cruzada en términos de nombres de servidor y de base de datos, la referencia funcionará de la misma manera, independientemente de la configuración de compilación que especifique.

Escenarios para referencias de bases de datos cruzadas

Visual Studio Team System Database admite los escenarios siguientes:

  • Creó un proyecto de base de datos e importó el esquema de una base de datos existente. El esquema contiene objetos que hacen referencia a los objetos de una o más bases de datos distintas. En las propiedades del proyecto, define una referencia correspondiente y reemplaza los nombres explícitos del servidor y la base de datos con variables SETVAR. Debido a esta definición, las referencias de bases de datos cruzadas se pueden validar en tiempo de diseño. También puede implementar el proyecto de base de datos en un entorno de desarrollo aislado, donde el nombre del servidor de destino es diferente del nombre del servidor de destino en el entorno de producción.

  • Tiene un proyecto de base de datos que contiene referencias de bases de datos cruzadas y dichas referencias usan variables SETVAR para identificar los servidores y las bases de datos. Desea cambiar los nombres de esas variables y actualizar las definiciones de objeto que contienen esas referencias.

  • Desea hacer referencia a los esquemas de base de datos adicionales del proyecto de base de datos que está desarrollando. Desea compartir sólo esos esquemas con el equipo sin tener que compartir los otros proyectos de base de datos con ellos. Puede agregar una referencia a los metarchivos de base de datos (.dbmeta) para esos otros proyectos y comprobar sólo los metarchivos en el control de versiones. Con este enfoque, puede restringir el acceso a los proyectos de base de datos que contienen los esquemas a los que desea hacer referencia. También debe utilizar este enfoque si desea implementar un proyecto de base de datos pero no cualquiera de los proyectos que dependen de él.

Puede usar la refactorización de base de datos para realizar tareas adicionales con referencias de bases de datos cruzadas. Para obtener más información, vea Cómo: Cambiar el nombre de referencias a un servidor o una base de datos.

Referencias a los proyectos y metarchivos de base de datos

Al agregar una referencia a un proyecto de base de datos, puede especificar otro proyecto de base de datos o un metarchivo, que se crea al generar un proyecto de base de datos.

Debe hacer referencia a otro proyecto de base de datos si:

  • Tiene que realizar cambios en los esquemas de la base de datos que contendrá la referencia y de aquella a la que se hace referencia. Al implementar el proyecto de base de datos que contiene la referencia, también se implementa el proyecto de base de datos al que se hace referencia.

Debe hacer referencia a un metarchivo de base de datos si:

  • Tiene que hacer referencia a una base de datos cuyo proyecto no está en la solución actual.

  • Tiene que implementar un proyecto único sin implementar los proyectos de los que depende.

  • Hace referencia a un esquema de base de datos que probablemente no va a cambiar. En este escenario, puede proteger el metarchivo de base de datos para el control de versiones.

Limitaciones de las referencias de bases de datos

Al importar un esquema de base de datos, las referencias a otras bases de datos en las definiciones de objetos generan advertencias porque el proyecto de base de datos no puede validar dichas referencias antes de implementarlo. Después de definir las referencias de base de datos en las propiedades del proyecto, puede validar las definiciones de objeto y resolver las advertencias. Puede actualizar a continuación las definiciones de objeto reemplazando los nombres de los servidores y bases de datos con variables. También puede utilizar la refactorización para realizar esta sustitución. Para obtener más información, vea Cómo: Crear referencias entre bases de datos y Cómo: Cambiar el nombre de referencias a un servidor o una base de datos.

Las variables y valores de los servidores y bases de datos a los que hace referencia no son específicos de una configuración de la compilación. Para especificar el servidor y la base de datos en un símbolo del sistema, debe hacer referencia a ellos en términos de variables de MSBuild, que se pueden sustituir en el momento de la implementación.

También existen las siguientes limitaciones:

  • Sólo puede agregar una referencia a una base de datos si tiene un proyecto de base de datos correspondiente.

  • Debe generar un proyecto de base de datos para poder agregar una referencia al metarchivo de ese proyecto de base de datos.

  • Debe generar los proyectos de base de datos a los que hace referencia para que las referencias de bases de datos cruzadas a ellos se resuelvan sin advertencias.

  • Si cambia la configuración de compilación de la solución o de los proyectos de base de datos a los que hace referencia, quizá necesite generar de nuevo la solución para que las referencias de bases de datos cruzadas a ellos se resuelvan sin advertencias.

  • Si hace referencia a un objeto en un proyecto de base de datos en otro servidor, debe definirlo como servidor vinculado en el servidor de destino. Para obtener más información, vea Cómo: Crear referencias entre bases de datos.

  • No es necesario que una referencia de bases de datos cruzadas haga referencia a la base de datos maestra.

  • Las referencias que incluyen variables SETVAR siempre deben tener el formato "[$(nombreDeVariable)]". Si omite los corchetes, no podrá implementar el proyecto de base de datos.

  • Los nombres de variables SETVAR deben ser únicos. Si el servidor tiene el mismo nombre que la base de datos, debe definir variables que tengan nombres diferentes pero que se resuelvan como el mismo valor.

Consideraciones de seguridad

El metarchivo que se crea al generar un proyecto de base de datos contiene información de esquema para ese proyecto. Debe limitar el acceso al metarchivo para proteger esa información de esquema. Para compartir los metarchivos con el equipo, puede comprobarlos en el control de versiones, en lugar de implementarlos en el servidor de destino. Si el proyecto de base de datos al que hace referencia está en la misma solución, otros programadores del proyecto tendrán acceso cuando se sincronicen para el control de versiones y para generar la solución.

Ejemplo

Si tiene dos proyectos de base de datos, ReportDb y DependentDb, quizá desee hacer referencia a los objetos de DependentDb desde ReportDb. Puede empezar por agregar una referencia en las propiedades del proyecto de base de datos de DependentDb y definir las variables de la siguiente forma:

  • RefServer

  • RefDatabase

El valor de RefServer es el nombre del servidor en el que DependentDb reside. El valor de RefDatabase es el nombre de la base de datos de destino que el proyecto DependentDb implementa. En este ejemplo, RefServer tiene el valor StageSvr y RefDatabase tiene el valor DepDb.

Podría agregar a ReportDb una vista que seleccione todas las columnas de la tabla Empleados en la DependentDb que se implementa en la base de datos denominada DepDb en el servidor StageSvr. Crearía la definición de objeto para esa vista de la siguiente forma:

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

Vea también

Tareas

Cómo: Cambiar el nombre de referencias a un servidor o una base de datos

Conceptos

Información general acerca del trabajo con objetos de base de datos

Introducción a la terminología de Database Edition

Otros recursos

Cómo: Crear referencias entre bases de datos