2010-08-23 14 views
6

Creé un nuevo proyecto de base de datos SQL Server dentro de VS 2010, importé los objetos de base de datos y configuraciones de una base de datos local llamada "administradores" y recibí el siguiente error al intentar construir el proyecto:Proyecto de base de datos VS 2010 - SQL03006 Error

SQL03006: Vista:. [dbo] [vw_mlFunds] tiene una referencia sin resolver al objeto [administradores] [dbo] [mlfunds]...

No sé por qué esta vista califica completamente una referencia de tabla para incluir el nombre real de la base de datos y preferiría no tener que cambiar el sql, ya que es código de otra persona y técnicamente no es incorrecto. Pero estoy pensando que calificar totalmente el nombre de tabla para incluir el nombre de la base de datos está confundiendo el compilador VS, ya que está a la espera [dbo]. [Mlfunds], no [administradores]. [Dbo]. [Mlfunds]. ¿Cuál es la mejor manera de resolver este problema? ¿Puedo configurar una nueva variable de nombre de base de datos/alias en alguna parte? ¿O tendré que refactorizar/modificar el sql para que compile? Gracias por adelantado.

Respuesta

5

En realidad, parece que el código tendrá que ser modificado, ya que esto no es compatible. Respuesta encontrado en este post:

Using local 3-part names in programmability objects

+0

conectar esto y no puede entender por qué su todavía las secuencias de comandos de comparación están bombardeando, asegúrese de establecer la opción "Variables SQLCMD" en la pantalla inicial "Seleccionar fuente/esquema de destino". – chprpipr

1

lo necesario para crear otro proyecto de base de datos para la base de datos [administradores] y tienen su proyecto de 'referencia' el otro proyecto. Puede hacer esto como un simple paso de ingeniería inversa en la base de datos [managers] que importará todos los objetos en esa base de datos en un nuevo proyecto de VSDB. Ver Using References in Database Projects.

+0

Podría aclarar esto para mí? Estoy confundido por la necesidad de una referencia cuando ambos objetos (la tabla base y la vista) residen en la misma base de datos [gerentes]. –

+1

Pensé que [gestionado] es una base de datos diferente. Si la vista califica explícitamente el nombre de la tabla con el nombre de la base de datos, la definición de vista es * incorrecta * técnicamente, porque el proyecto se puede implementar con un nombre de base de datos diferente, e incluso después de la implementación puede restaurarse/copiarse/adjuntarse/hacer una instantánea una variedad de nombres y la vista no sería válida en todos esos escenarios. –

+0

Creo plenamente la calificación de la tabla con el nombre de base de datos no fue intencional por parte del desarrollador original, y podemos llegar a modificar el script de vista para quitar la referencia de nombre de base de datos, pero el script de creación de la vista se ejecutará tal y como son, sin errores en ssms y, cuando se ejecuta en la base de datos de gerentes, reconocerá la referencia explícita a los gerentes como si estuvieran a sí mismos. Estoy de acuerdo en que este es un código descuidado, pero estaba tratando de no meterse con él por el momento, ya que requerirá pruebas. Es por eso que estaba tratando de descubrir si hay alguna forma de evitar esto. Si –

2

que estaba recibiendo el mismo error después de crear un proyecto e importación de un DB. El problema para mí fue que la referencia de la tabla FROM incluía el nombre completo, pero los campos seleccionados no; de la siguiente manera

SELEC l.UserID, l.Email, m.DOB, ... 
FROM ***[DBName].dbo***.Layout as l 
LEFT OUTER JOIN masterUs as m 

he modificado la referencia completo mediante la eliminación de la parte DBName y DBO y todos los errores se resolvieron

SELECT l.UserID, l.Email, m.DOB, .... 
FROM Layout as l 
LEFT OUTER JOIN masterUs as m 
Cuestiones relacionadas