2010-08-23 10 views
6

Ho creato un nuovo progetto database SQL Server all'interno di VS 2010, importato gli oggetti e le impostazioni del database da un database locale denominato "gestori" e ho ricevuto il seguente errore durante il tentativo di creare il progetto:Progetto database VS 2010 - SQL03006 Errore

SQL03006: Visualizza: [dbo]. [Vw_mlFunds] ha un riferimento non risolto all'oggetto [gestori]. [Dbo]. [Mlfunds].

Non so perché questa vista qualifichi completamente un riferimento tabella per includere il nome effettivo del database e preferirei non dover cambiare lo sql, come il codice di qualcun altro e tecnicamente non è corretto. Ma sto pensando che qualificare completamente il nome della tabella per includere il nome del database confonde il compilatore VS, dal momento che si aspetta [dbo]. [Mlfunds], non [managers]. [Dbo]. [Mlfunds]. Il modo migliore per risolvere questo problema? Posso impostare una nuova variabile/alias nome del database da qualche parte? O dovrò refactoring/modificare il sql per farlo compilare? Grazie in anticipo.

risposta

5

In realtà, sembra che il codice dovrà essere modificato, in quanto non è supportato. Risposta trovato in questo post:

Using local 3-part names in programmability objects

+0

Se si collega questo e non si riesce a capire perché i tuoi script di confronto siano ancora bombardati, assicurarsi di impostare l'opzione "Variabili SQLCMD" nella schermata iniziale "Seleziona schema sorgente/target". – chprpipr

1

È necessario creare un altro progetto di database per il database [manager] e fare in modo che il proprio progetto "faccia riferimento" all'altro progetto. Puoi farlo come un semplice passaggio di reverse engineering sul database [managers] che importerà tutti gli oggetti in quel database in un nuovo progetto VSDB. Vedi Using References in Database Projects.

+0

Potrebbe chiarire questo per me? Sono confuso dalla necessità di un riferimento quando entrambi gli oggetti (la tabella di base e la vista) risiedono nello stesso database [manager]. –

+1

Ho pensato [gestito] è un database diverso. Se la vista qualifica esplicitamente il nome della tabella con il nome del database, la definizione della vista è tecnicamente * errata *, perché il progetto può essere distribuito con un nome DB diverso, e anche la successiva distribuzione può essere ripristinata/copiata/allegata/istantanea sotto una varietà di nomi e la vista non sarebbe valida in tutti questi scenari. –

+0

Penso che la qualifica completa della tabella con il nome del database non fosse intenzionale da parte dello sviluppatore originale, e potremmo finire per modificare lo script di visualizzazione per rimuovere il riferimento al nome del database, ma lo script di creazione per la vista verrà eseguito così com'è errori in SSMS e, quando viene eseguito contro il database dei gestori, riconoscerà il riferimento esplicito ai gestori come se fosse a se stesso. Sono d'accordo che questo è un codice sciatto, ma ho cercato di non scherzare con esso per il momento, in quanto richiederà test. Ecco perché stavo cercando di capire se c'è un modo per aggirare questo. –

2

mi è stato sempre lo stesso errore dopo aver creato un progetto e l'importazione di un DB. Il problema per me era che il riferimento alla tabella FROM includeva il nome completo, ma i campi selezionati no; come segue

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

ho modificato il riferimento completo rimuovendo la parte DBName e DBO e tutti gli errori sono stati risolti

SELECT l.UserID, l.Email, m.DOB, .... 
FROM Layout as l 
LEFT OUTER JOIN masterUs as m 
Problemi correlati