2010-08-20 16 views
5

Tengo un problema muy extraño al crear un proyecto de base de datos de SQL Server 2008 desde Visual Studio 2010. Creé el proyecto de base de datos y luego importé los objetos de la base de datos y la configuración de una base de datos local con la que estoy trabajando. Luego fui a compilar el proyecto de base de datos y obtuve el siguiente error:VS 2010 Database Project bug?

SQL03006: Ver: [dbo]. [GovCAStaff] tiene una referencia no resuelta al objeto [CTS_Staff]. [Dbo]. [Client_Assignments].

El problema parece ser que la vista GovCAStaff está haciendo referencia a una tabla en una base de datos diferente (CTS_Staff). Sin embargo, tengo numerosas funciones y procedimientos almacenados en el mismo proyecto de base de datos que hacen referencia a tablas en una base de datos diferente, pero el proceso de compilación solo genera advertencias para aquellos, no errores. Además de reescribir la vista como una función, ¿alguien sabe de una forma de deshacerse de este error de compilación? ¿Es esta una limitación de vistas conocida dentro de los proyectos de bases de datos? De todos modos, estoy realmente perplejo. Ha buscado en Google este tema y no ha encontrado nada relevante. Cualquier ayuda sería muy apreciada. Gracias por adelantado.

Respuesta

7

El motivo por el que este error aparece en las vistas, pero no en las funciones y procedimientos almacenados, es porque así es como reaccionará SQL Server si la base de datos/tabla no existe realmente. En otras palabras, en SQL Server puede definir procedimientos almacenados y funciones que hacen referencia a tablas que no existen o que de otro modo serían inaccesibles. No es así para las vistas.

La manera de resolver este problema es agregar una 'referencia de base de datos' (un archivo .dbschema) a su proyecto para que el proceso de compilación del proyecto conozca el esquema de esa otra base de datos. ¿Dónde conseguir este archivo .dbschema mágico?

  1. Cree otro proyecto de base de datos (presumiblemente en la misma solución) para la otra base de datos. Esto es más conveniente, ya que solo puede crear una 'referencia de proyecto' y todo se mantiene actualizado (de todos modos, quería un proyecto de DB para esa otra base de datos, ¿no?).
  2. Crea el archivo .dbschema manualmente a través del vsdbcmd.
  3. Si la base de datos es una base de datos 'sistema' (por ejemplo, 'master' o 'msdb'), puede usar uno de los archivos .dbschema preconstruidos ({Program Files} \ Microsoft Visual Studio 9.0 \ VSTSDB \ Extensions \ SqlServer {version} \ DBSchemas).
+3

Gracias por los comentarios. Esta explicación tiene sentido. En realidad, originalmente había intentado utilizar la referencia .dbschema, pero no configuré las configuraciones de referencia de la base de datos correctamente, así que no funcionó (aún así seguí recibiendo errores de compilación). Finalmente terminé haciendo que funcionara al definir una variable de base de datos literal establecida en el nombre de la otra base de datos, así como establecer la opción para suprimir los errores causados ​​por las referencias no resueltas en el proyecto al que se hace referencia. ¡Muchas gracias por su asistencia oportuna! –

+1

He votado por su comentario. De todos modos, si respondías tu propia pregunta, tal vez tendría más visibilidad – p4bl0