10

Ho creato un progetto di database SQL Server in Visual Studio 2013 e ho importato un DACPAC estratto da un database di produzione. Quando ho provato a creare il progetto ottengo centinaia di errori SQL71501 e SQL71561 (entrambi sono "riferimento non risolto a un oggetto"). Esaminando gli script il problema è che molte viste e stored procedure usano tre nomi di parte: [database]. [Schema]. [Oggetto].Riferimenti non risolti allo stesso database Progetto

Sembra che Visual Studio 2013 lanci questo errore ogni volta che incontra un nome in tre parti che include il database rappresentato dal progetto del database. Ad esempio, se il progetto di database rappresenta il database "MyDatabase" e uno script SQL in quel progetto include qualcosa come SELECT t.Column1 FROM MyDatabase.dbo.MyTable t, quindi VS 2013 lancia SQL71501 o SQL71561 quando costruisco il progetto.

Esiste un modo per sopprimere errori di riferimento non risolti che si applicano solo al database corrente? Voglio comunque che Visual Studio generi errori per riferimenti non risolti a database esterni.

MODIFICA, Correzione: Originariamente indicato il codice di errore era SQL71501. Tuttavia, Visual Studio genera errori SQL71501 e SQL71561 per i riferimenti non risolti allo stesso database.

+0

Mi chiedo anche questo. Ho trovato qualcosa che sembrava funzionare, ma poi ho avuto tutti i tipi di errori di compilazione. Solo il successo che ho avuto è la rimozione della denominazione in 3 parti da tutti i proc, le viste e le funzioni per lo stesso database. È relativamente facile da trovare se si limita ai file di tipo * .sql e si include il nome dello schema, ma sembra che ci dovrebbe essere un modo migliore. –

+0

@PeterSchott: ho trovato un precedente post Stackoverflow che sembra confermare la rimozione di 3 nomi di parti è l'unica soluzione: http://stackoverflow.com/questions/19153996/ssdt-unresolved-reference-error-sql71561. La domanda include un collegamento a un vecchio blog MSDN che sembra confermare che non possiamo usare nomi a 3 parti nei progetti di database SSDT e l'unica soluzione è rimuovere il nome del database ovunque venga visualizzato. (Osservo anche i collegamenti nel punto di risposta a quello che presumo sia il tuo blog!) Il post sul blog di MSDN ha 5 anni e sono deluso dal fatto che non abbiano risolto questo problema nelle versioni successive. –

+0

Beh, come ho detto che ho avuto _partial_ successo. Sembrava fantastico fino a quando non ho costruito e ho scoperto che molte altre cose ora lanciavano errori. Sono d'accordo che è deludente. –

risposta

6

Beh, in realtà ci sono due soluzioni alternative. La mia personale opinione è che ci sia un bug in SSDT riguardante nomi di oggetti in 3 parti nel database corrente.

  1. Creare lo snapshot del progetto (dacpac) e fare riferimento come riferimento del database. Ricordarsi di cancellare il campo della variabile del database nella finestra di dialogo "Aggiungi riferimento database".
    Funziona tuttavia questo approccio non è raccomandato da Microsoft e può causare altri problemi: https://connect.microsoft.com/SQLServer/feedbackdetail/view/1047094/post-deployment-script-is-not-generated-in-the-publish-script

  2. Al vostro codice di sostituire tutte le occorrenze di MyDatabase.dbo.MyTable con [$ (DatabaseName)] .dbo.MyTable
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/1863d960-d32d-4920-9a30-13dc86c6f857/sql71562-unresolved-reference-to-object-followd-by-database-name-in-the-same-project?forum=ssdt&prof=required

+0

Accetto la soluzione alternativa n. 2 (utilizzando [$ (DatabaseName)] come nome del database negli script) come risposta. L'ho provato, funziona e sembra meno problematico rispetto all'uso di dacpac come riferimento di database. Saluti. –

+1

Non è riuscito ad aiutarmi a provare a distribuire un dacpac in azzurro .. Ho i miei bug da risolvere Non posso perdere tempo a risolvere i bug di microsoft – MatanCo

+0

Ho ereditato un progetto di database e ha la soluzione alternativa per [$ (DatabaseName)] e Ricevo ancora SQL71561 perché? – KillerSnail

1

In Visual Studio:

1) Aprire SQL Esplora oggetti, collegare il vostro database di serv ehm, fate clic destro sul database di riferimento non risolto e "Estrai applicazione livello dati"

enter image description here

2) Inserire un percorso di file. Normalmente io uso \ Documenti \ Packages SQL Server Management Studio \ DAC \ e cliccare su OK

3) In attesa per l'estrazione

4) Fare clic destro sul progetto Riferimenti e aggiungere database Riferimento

enter image description here

5) Quindi sostituire i riferimenti nelle funzioni, SP, .. con prefisso [$ (YourDB)]

Problemi correlati