riferimento non risolto all'oggetto [INFORMATION_SCHEMA]. [TABLES]


99

Ho creato una UDF che accede alla [INFORMATION_SCHEMA].[TABLES]vista:

CREATE FUNCTION [dbo].[CountTables]
(
    @name sysname
)
RETURNS INT
AS
BEGIN
    RETURN
    (
        SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @name
    );
END

In Visual Studio, lo schema e il nome della vista sono entrambi contrassegnati da un avviso:

SQL71502: Funzione: [dbo]. [CountTables] ha un riferimento non risolto all'oggetto [INFORMATION_SCHEMA]. [TABLES].

Posso ancora pubblicare il progetto del database senza problemi e l'UDF sembra funzionare correttamente. IntelliSense compila il nome della vista per me, quindi non sembra avere problemi con esso.

Ho anche provato a cambiare l'implementazione da usare al sys.objectsposto di questa vista, ma mi è stato dato lo stesso avviso anche per questa vista.

Come posso risolvere questo avviso?

Risposte:


180

Aggiungi un riferimento al database a master:

  1. Sotto il progetto, fai clic con il pulsante destro del mouse su Riferimenti .
  2. Selezionare riferimento Add database ... .
  3. Seleziona Database di sistema .
  4. Assicurati che il master sia selezionato.
  5. Premere OK .

Tieni presente che l'aggiornamento di VS potrebbe richiedere del tempo.


6
E solo un avvertimento: se qualcuno ha questi SSDT installati in un percorso diverso, potresti avere problemi. Ci siamo imbattuti in questo nel nostro ultimo progetto in cui alcuni avevano un drive E: e altri solo un drive C :. Abbiamo copiato quel file di riferimento e inserito in una posizione condivisa in modo da poterlo fare riferimento tramite. \ SharedSchemas \ master.dacpac. Probabilmente ora è stato risolto, ma era un problema nella prima versione.
Peter Schott

Peter Schott ha ragione qui. In genere è una buona idea copiare i file dacpac referenziati da qualche parte all'interno della soluzione e utilizzarli da lì.
Veysel Ozdemir

1
Per me dice "Un riferimento a questo database di sistema esiste già nel tuo progetto." Sono bloccato adesso!
orad

1
Solo perché la persona successiva salvasse un po 'di sanità mentale - che ci crediate o nemmeno smettere di VS non era sufficiente per farlo rimanere bloccato - ho dovuto riavviare e poi l'impostazione ha iniziato a funzionare. Potresti anche voler aprire le Opzioni di Visual Studio ... Strumenti di SQL Server ... Modifica in linea ... abilitare "Risolvi i riferimenti alle viste di sistema e agli oggetti del database master".
NYCdotNet

Sto riscontrando lo stesso problema con Visual Studio 2017 e non vedo "Riferimento DataBase" nell'elenco dei riferimenti
Scarl

3

Nel nostro progetto abbiamo già un riferimento al master, ma abbiamo riscontrato questo problema. Ecco l'errore che abbiamo ottenuto:

SQL71502: Procedure: [Schema].[StoredProc1] has an unresolved reference to object [Schema].[Table1].[Property1].

Per risolvere l'errore di riferimento, nel file sql della tabella, fare clic con il pulsante destro del mouse sulle proprietà e verificare che BuildSettings sia impostato su Build.

Modificandolo build lo ha risolto.


2

quello che ha detto Sam è il modo migliore per farlo.
Tuttavia, se hai uno scenario in cui devi distribuire il dacpac da una macchina che non ha quel riferimento in quella posizione specifica, potresti avere problemi. Un altro modo è aprire il file .project e assicurarsi che il tag seguente abbia il valore di falseper la configurazione di build che si sta tentando di eseguire.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

In questo modo non è necessario aggiungere un riferimento al progetto.


13
Questa dovrebbe essere l'ultima risorsa, perché perdi feedback sugli errori sql!
Jowen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.