nome oggetto server SQL non valido - ma le tabelle sono elencate nell'elenco delle tabelle SSMS


336

Sto tentando di creare un Stored Procedureper un database appena creato. Tuttavia, l' SSMSintellisense non riconosce più della metà delle tabelle che sono state create.

Ad esempio, mentre nella colonna di sinistra sotto le tabelle ho una tabella dbo.Room, quando digito " dbo." nella nuova finestra della query, quella tabella non è elencata, infatti sono elencate solo 17 delle 37 tabelle.

Non vedo alcuna differenza tra le tabelle elencate da intellisense e quelle no. Se scrivo manualmente dbo.Room, viene sottolineato, con un errore di

Nome oggetto non valido 'dbo.Room' ..

Mi sono perso qualcosa nell'allestimento dei tavoli?

AGGIORNAMENTO: ho provato ad aggiornare l'elenco delle tabelle (più volte)


11
Risposta che funziona: [DatabaseName].[Schema].[TableName] SO: Nome oggetto non valido sql
Ivan Chau,

Risposte:


703

Provare:

Edit-> IntelliSense->Refresh Local Cache

Ciò dovrebbe aggiornare i dati memorizzati nella cache da Intellisense per fornire supporto typeahead e rilevamento degli errori pre-esecuzione.

NOTA: il cursore deve trovarsi nell'editor di query affinché il menu IntelliSense sia visibile.


8
Intellisense / SSMS si aggiorna periodicamente? O deve essere sempre un processo manuale? (Ho la mia ipotesi basata su SSMS nel 2005, ma si può sempre sperare.)
Philip Kelley,

37
incredibile che nel 2012 devi farlo. Non potrebbero aggiornare automaticamente Intellisense ogni pochi secondi?
Matthew Lock,

6
Ciò potrebbe richiedere di colpire il database e di estrarre le definizioni della tabella / vista ogni pochi secondi.
jinglesthula,

8
NOTA: il cursore deve trovarsi nell'editor di query affinché il menu IntelliSense sia visibile.
Bradrad

5
@jinglesthula: Questo mi salverebbe colpire il server di database!
Paul,

80

Ctrl+ Shift+ Raggiorna intellisense anche in Management Studio 2008.


Non ho questa funzione ... quando premo ctrl + maiusc + R non cambia nulla
Ibrahim Amer

4
@IbrahimAmer Il cursore deve trovarsi in un editor di query affinché l'opzione di menu Intellisense sia disponibile. Se l'opzione di menu intellisense non è disponibile, il collegamento non farà nulla.
Rachael,

Funziona anche con T-SQL in SQL Server Management Studio 2014
Vahid Amiri,

44

Assicurarsi che il DB selezionato sia quello in cui si trova la tabella. Stavo eseguendo lo script Master. Nel mio caso, ho dovuto passare a hr_db.

inserisci qui la descrizione dell'immagine

Errore da principiante ma, potrebbe aiutare qualcuno.


4
Non sono sicuro che sia un errore da principiante ad essere onesti, poiché ogni volta che ricolleghi il server per qualche motivo passa a "master" senza una ragione ovvia. :)
Chris Rae,

Se così fosse e la query non qualificasse completamente i nomi delle tabelle, il codice non verrebbe eseguito. Credo che l'OP descrivesse il rilevamento di errori falsi positivi quando il problema che hai descritto non era un fattore che contribuisce. (Certamente, avevo già escluso la possibilità di andare a cercare e finire qui.)
Dodecaphone,

Esattamente il mio problema. Non ci sono indicazioni da SMS che ha cambiato il contesto del database o qualsiasi altro indizio.
Daniel Black,

1
@ChrisRae: Questo perché masterè impostato come database predefinito per l'accesso dell'utente. Basta cambiarlo utilizzando sp_defaultdbun altro database per selezionare l'altro database in SSMS al momento dell'accesso. (Può essere impostato anche in SSMS da Security > Logins > your user login > Properties > Default database)
AxD

36

una volta creato un nuovo oggetto SQL Server, l'oggetto appena creato non viene aggiornato nella cache locale di IntelliSence e, a causa di ciò, mostra una linea rossa sotto tale oggetto. Quindi devi solo aggiornare SSMS IntelliSence Local Cache e una volta aggiornato, IntelliSenceaggiungerà automaticamente l'oggetto appena creato nella cache e la linea rossa scomparirà. prova questo

Edit -> IntelliSense -> Refresh Local Cache o Ctrl+ Shift+R

inserisci qui la descrizione dell'immagine


1
Non ho questa funzione ... quando premo ctrl + maiusc + R non cambia nulla
Ibrahim Amer

4
@IbrahimAmer Il cursore deve trovarsi in un editor di query affinché l'opzione di menu Intellisense sia disponibile. Se l'opzione di menu intellisense non è disponibile, il collegamento non farà nulla.
Rachael,

18

Nel mio caso, la cache IntelliSense elencava le informazioni sugli oggetti per un database completamente diverso. Se avessi fatto clic sul pulsante "Nuova query" in SSMS, avrebbe aperto una query sul mio catalogo predefinito sul server e quell'editor di query avrebbe sempre usato solo quel database. L'aggiornamento della cache non ha cambiato nulla. Il riavvio di SSMS non ha cambiato nulla. La modifica del database non ha cambiato nulla.

Ho finito per creare una query facendo clic con il pulsante destro del mouse sul database che volevo effettivamente utilizzare e scegliendo "Nuova query" dal menu di scelta rapida. Ora SSMS utilizza gli oggetti corretti per IntelliSense.


3
Anche questo è stato il mio caso. Grazie per la condivisione.
Behrooz Karjoo,

1
USE datbaseName GO prima che la query funzioni anche nell'impostazione del contesto
Behrooz Karjoo,

@BehroozKarjoo Sì, l'ho provato. Non sembra sempre funzionare. Se potessi riprodurlo, lo metterei su Microsoft Connect o qualcosa del genere. Sono sicuro che lo contrassegnerebbero come WONTFIX o qualcosa di ugualmente irritante, ma lo segnalerei.
Bacon Bits

Ha funzionato perfettamente! Grazie! :)
Sean Stayns,

Riavvia SSMS e fai clic con il pulsante destro del mouse sulla nuova query ha funzionato per me.
Hitsa,

10

Sei sicuro che la tabella in questione esiste?

Hai aggiornato la vista tabella in Esplora oggetti? Questo può essere fatto facendo clic con il tasto destro sulla cartella "tabelle" e premendo il F5tasto.

Potrebbe anche essere necessario ripetere il test della cache di Intellisense.

Questo può essere fatto seguendo il percorso del menu: Modifica -> IntelliSense -> Aggiorna cache locale


7

La soluzione è:

  • Fai clic sul menu Query,
  • quindi fare clic su "Cambia database".
  • Seleziona il nome del database appropriato.

Questo è tutto.


6

Lo stesso problema con me quando ho usato questo problema di sintassi risolto.

Sintassi:

Use [YourDatabaseName]
Your Query Here

4

Anche dopo aver installato SP3 su SQL Server 2008 Enterprise, questo è ancora un "problema". Ctrl+ Shift+ Rcome tutti hanno detto risolto questo problema per me.


Non ho questa funzione ... quando premo ctrl + maiusc + R non cambia nulla
Ibrahim Amer

@IbrahimAmer Il cursore deve trovarsi in un editor di query affinché l'opzione di menu Intellisense sia disponibile. Se l'opzione di menu intellisense non è disponibile, il collegamento non farà nulla.
Rachael,

3

Risolto per SSMS 2016.

Si è verificato un problema simile, ma Intellisense non era nel menu Modifica.

Ciò che sembrava risolverlo era accendere e spegnere Intellisens, fare clic con il tasto destro sull'editor SQL e fare clic su "Intellisense abilitato". Fai nuovamente clic con il tasto destro del mouse su "Intellisense abilitato" per riaccenderlo. Ctr Q, lo faccio anche io.

Questo ha risolto il problema, e so anche che ottenere Intellisense dal menu Modifica.


2

Ho dovuto chiudere SMSS e riaprirlo. Ho provato ad aggiornare la cache locale e non ha funzionato.


1

hai provato: fai clic destro sul database e fai clic su "aggiorna"


Sì, l'ho provato, sono sicuro che è lì, posso aggiungere record e modificare ecc. Ho appena fatto un Select * da dbo.Room e, mentre ho ancora la sottolineatura, ha prodotto il contenuto della tabella. Proverò un riavvio.
Richbits

1

Mi rendo conto che a questa domanda è già stata data risposta, tuttavia, ho avuto una soluzione diversa:

Se si sta scrivendo uno script in cui si rilasciano le tabelle senza ricrearle, tali tabelle verranno visualizzate come mancanti se si tenta di fare riferimento in un secondo momento.

Nota: questo non accadrà con uno script che viene costantemente eseguito, ma a volte è più facile avere uno script con query da ripetere rispetto a digitarle ogni volta.


0

Ho riscontrato il problema con: ODBC e autenticazione SQL Server in ODBC e Firedac-Connection

Soluzione: ho dovuto impostare il parametro MetaDefSchema sul nome utente sqlserver: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Il wikidoc dice: MetaDefSchema = Nome schema predefinito. Il codice temporale di progettazione >> esclude << !! il nome dello schema dall'oggetto SQL-Server-Authenticatoinname se è uguale a MetaDefSchema.

senza impostazione, il codificatore automatico crea: dbname.username.tablename -> nome oggetto non valido

Con l'impostazione di MetaDefSchema su sqlserver-username: dbname.tablename -> funziona!

Vedi anche embarcadero-doc su: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

Spero, aiuta qualcun altro ..

saluti, Lutz


0

In azure data studio premi "cmd + shift + p" e digita "intellisense", vedrai un'opzione per aggiornare la cache di intellisense.


0

Non dimenticare di creare le tue migrazioni dopo aver scritto i modelli

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.