Compartir a través de


Uso de referencias en proyectos de base de datos

Puede agregar varios tipos de referencias a los proyectos de base de datos para controlar diferentes situaciones. Los procedimientos varían ligeramente según los diferentes tipos de referencias.

En la siguiente tabla se muestran los tipos de referencias que puede agregar y las situaciones que cada tipo aborda.

Tipo de referencia

Razones para utilizarlo

Un proyecto de base de datos (.dbproj) en la solución actual

Agregaría este tipo de referencia para habilitar varios escenarios.

  • Puede hacer referencia a un objeto de base de datos de un proyecto desde otro proyecto agregando la referencia y definiendo una variable para el nombre del servidor (opcional) y una variable para el nombre de la base de datos que contiene el objeto. Tiene que usar estas referencias entre bases de datos si su base de datos hace referencia a objetos de otras bases de datos. Para obtener más información, vea Iniciar el desarrollo en equipo de bases de datos que hacen referencia a otras bases de datos.

Si agrega una referencia a otro proyecto pero no define ninguna variable, se crea un proyecto compuesto. Al implementar este tipo de proyecto, también implementa los objetos en otros proyectos. Para obtener más información, vea Crear proyectos compuestos mediante referencias más adelante en este tema.

La salida de un proyecto de base de datos (archivo .dbschema), de la solución actual o de otra diferente

Si debe hacer referencia a los objetos de otra base de datos pero desea aislar esa base de datos de otros desarrolladores, debe agregar una referencia a un archivo de esquema de la base de datos. Podría adoptar este enfoque bien porque desea evitar los cambios o porque no puede actualizar la base de datos. Por ejemplo, podría agregar una referencia a un archivo .dbschema si el proyecto de base de datos debe hacer referencia a inicios de sesión o claves que se comparten y se definen en el servidor pero son utilizadas a través de varios proyectos de base de datos. Para obtener más información, vea Iniciar el desarrollo en equipo de bases de datos que hacen referencia a objetos de servidor compartidos.

Tal vez le interese hacer referencia a un archivo .dbschema que contiene las definiciones de los objetos de servidor y no desea comprobar la configuración del servidor cuando implementa el proyecto de base de datos. Para este escenario, podría agregar una referencia al archivo master.dbschema y definir un literal para la variable de base de datos cuyo valor es "principal". Haciendo esto, las referencias a los objetos definidos en la base de datos "principal" se pueden resolver sin errores. Para obtener más información sobre los literales, vea Hacer referencia a bases de datos usando literales más adelante en este tema.

Un archivo master.dbschema que contiene definiciones de objetos de sistema

Si desea hacer referencia a los objetos de sistema, como los procedimientos almacenados, las tablas, las vistas o los catálogos, debe agregar una referencia al master.dbschema adecuado para resolver esas referencias. Por ejemplo, le interesa hacer referencia a sys.sysobjects en un procedimiento almacenado. Un archivo master.dbschema se proporciona con Visual Studio Premium para cada versión compatible de SQL Server. Puede encontrar los archivos .dbschema en [Archivos de programa]\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\Versión\DBSchemas, donde Versión es la versión de SQL Server que está utilizando (como 2005 o 2008).

En este escenario, podría agregar una referencia al archivo master.dbschema correspondiente y definir un literal para la variable de base de datos cuyo valor es "principal". Haciendo esto, las referencias a los objetos definidos en la base de datos "principal" se pueden resolver sin errores. Para obtener más información sobre los literales, vea Hacer referencia a bases de datos usando literales más adelante en este tema.

Un proyecto de Common Language Runtime (CLR) de SQL en la solución actual

Haría referencia a un proyecto SQLCLR en la solución si está desarrollando uno o más objetos SQLCLR que desea implementar con el proyecto de base de datos. Al implementar el proyecto de base de datos, también se implementa el ensamblado que produce el proyecto SQLCLR al que se hace referencia. La instrucción CREATE ASSEMBLY se genera de las propiedades que especifica para esa referencia. Para obtener más información, vea Iniciar el desarrollo en equipo de bases de datos que hacen referencia a objetos de SQLCLR y Uso de referencias de bases de datos cruzadas más adelante en este tema.

Un ensamblado de SQLCLR, de un proyecto de la solución actual o de otro origen

Agregaría una referencia a un ensamblado de SQLCLR si su proyecto de base de datos debe hacer referencia a los objetos que se definen en ese ensamblado pero que no se desarrollan al mismo tiempo o por el mismo equipo. Al implementar el proyecto de base de datos, también implementa el ensamblado al que hace referencia.

Una definición del esquema XML, tal y como se define en un archivo .xsd

Debe registrar un esquema para poder asociarlo a una variable, un parámetro o una columna para crear parámetros y columnas y variables XML con tipo. Le puede interesar el uso de XML con tipo si alguno de los siguientes enunciados es cierto:

  • Tiene esquemas para los datos XML y desea que el servidor valide esos datos según los esquemas.

  • Desea optimizar el almacenamiento y consultas según la información de tipo.

  • Desea aprovechar mejor la información de tipo cuando las consultas se están compilando.

Para obtener más información, vea Iniciar el desarrollo en equipo de bases de datos que utilizan colecciones de esquemas XML.

Definir referencias entre bases de datos

Si crea o importa objetos de base de datos que hacen referencia a los objetos de otras bases de datos, debe definir una referencia correspondiente en las propiedades de su proyecto de base de datos. 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 compilar el proyecto de base de datos, los valores que especificó reemplazan a las variables.

Escenarios para referencias de bases de datos cruzadas

Visual Studio Premium 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 del 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 archivos de esquema de base de datos (.dbschema) para esos otros proyectos y proteger solo los archivos de esquema 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 proyectos y archivos de esquema de base de datos

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

Debe hacer referencia a otro proyecto de base de datos si se cumple lo siguiente:

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

Debería hacer referencia a un archivo de esquema si alguno de los enunciados siguientes es cierto:

  • 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 archivo de esquema en 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: Agregar referencias a proyectos de base 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 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 compilar un proyecto de base de datos para poder agregar una referencia al archivo de esquema 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: Agregar referencias a proyectos de base 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 archivo de esquema que se crea al compilar un proyecto de base de datos contiene información de esquema para ese proyecto. Debe limitar el acceso a este tipo de archivo para proteger esa información de esquema. Para compartir los archivos de esquema con el equipo, puede protegerlos con 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 de una referencia entre bases de datos

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 una vista a ReportDb que muestre todas las columnas en la tabla Employee en DependentDb. Tiene que implementa la tabla en la base de datos que se denomina DepDb del servidor que se denomina StageSvr. Para crear la definición del objeto para esa vista, agregaría las siguientes instrucciones:

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

Crear proyectos compuestos mediante referencias

Los proyectos de servidor y base de datos no pueden resolver todos los escenarios que surgen durante desarrollo de bases de datos. Para resolver escenarios más complejos, puede crear proyectos compuestos a partir de dos o más otros proyectos.

Crea un proyecto compuesto cuando agrega una referencia en un proyecto de base de datos a otra base de datos o proyecto de servidor pero no proporciona los valores para las variables de base de datos y servidor en los proyectos a los que está haciendo referencia. Al agregar este tipo de referencia, el proyecto incluye todos los objetos y valores del proyecto al que señala la referencia.

Mediante un proyecto compuesto, se pueden abordar los siguientes escenarios:

  • Puede administrar esquemas de base de datos que hacen referencia a claves o inicios de sesión compartidos. Para obtener más información, vea Iniciar el desarrollo en equipo de bases de datos que hacen referencia a objetos de servidor compartidos.

  • Puede descomponer una base de datos grande en subproyectos, para aumentar el rendimiento, o para separar esquemas o tipos de objeto. También le puede interesar hacer este cambio si varias bases de datos comparten algunos objetos pero tienen otras diferencias. Solo puede descomponer un proyecto en dos o más subproyectos si el cambio no crea una referencia circular.

Al implementar el proyecto compuesto, también implementa los objetos en todos los proyectos de base de datos a los que hace referencia. Para obtener más información, vea Iniciar el desarrollo en equipo de bases de datos grandes.

Hacer referencia a bases de datos usando literales

Puede definir las variables de referencia de base de datos para especificar el nombre de una base de datos a la que se hace referencia en el entorno de implementación de destino. Si no desea utilizar las variables SQLCMD, porque el nombre de la base de datos de destino siempre es el mismo en su entorno de implementación, puede especificar un literal cuyo valor sea el nombre de la base de datos a la que se hace referencia.

Si utiliza las variables, la sintaxis sería similar a esta:

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

Si utiliza un literal, la sintaxis sería similar a esta:

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

Para obtener más información sobre cómo especificar un valor literal, vea Cómo: Agregar referencias a proyectos de base de datos.

Vea también

Tareas

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

Cómo: Agregar referencias a proyectos de base de datos

Conceptos

Crear y modificar objetos de servidor y base de datos