Nom d'objet non valide du serveur SQL - mais les tables sont répertoriées dans la liste des tables SSMS

336

J'essaie de créer un Stored Procedure pour une base de données nouvellement créée. Cependant l' SSMSintellisense ne reconnaît pas plus de la moitié des tableaux qui ont été créés.

Par exemple, dans la colonne de gauche sous les tableaux, j'ai un tableau dbo.Room , lorsque je tape " dbo." dans la nouvelle fenêtre de requête, cette table n'est pas répertoriée, en fait, seules 17 des 37 tables sont répertoriées.

Je ne vois aucune différence entre les tableaux répertoriés par intellisense et ceux qui ne le sont pas. Si je tape manuellement dbo.Room, il est souligné, avec une erreur de

Nom d'objet non valide 'dbo.Room' ..

Ai-je raté quelque chose lors de la mise en place des tables?

MISE À JOUR: J'ai essayé d'actualiser la liste des tables (plusieurs fois)

Richbits
la source
11
Réponse qui fonctionne: [DatabaseName].[Schema].[TableName] SO: Nom d'objet invalide sql
Ivan Chau

Réponses:

703

Essayer:

Edit-> IntelliSense->Refresh Local Cache

Cela devrait actualiser les données mises en cache par Intellisense pour fournir un support de frappe et une détection des erreurs de pré-exécution.

REMARQUE: votre curseur doit être dans l'éditeur de requête pour que le menu IntelliSense soit visible.

Adam Robinson
la source
8
Intellisense / SSMS se rafraîchit-il périodiquement? Ou cela doit-il toujours être un processus manuel? (J'ai une supposition basée sur SSMS en 2005, mais on peut toujours espérer.)
Philip Kelley
37
incroyable qu'en 2012 vous ayez besoin de faire ça. Ne pourraient-ils pas mettre à jour Intellisense toutes les quelques secondes automatiquement?
Matthew Lock
6
Cela peut nécessiter de frapper la base de données et d'extraire les définitions de table / vue toutes les quelques secondes.
jinglesthula
8
Remarque: votre curseur doit être dans l'éditeur de requête pour que le menu IntelliSense soit visible.
bradlis7
5
@jinglesthula: Cela sauverait me frapper le serveur de base de données!
Paul
80

Ctrl+ Shift+ Rrafraîchit également intellisense dans le studio de gestion 2008.

Zielyn
la source
Je n'ai pas cette fonctionnalité ... quand j'appuie sur ctrl + shift + R rien ne change
Ibrahim Amer
4
@IbrahimAmer Votre curseur doit être dans un éditeur de requête pour que l'option de menu Intellisense soit disponible. Si l'option de menu intellisense n'est pas disponible, le raccourci ne fera rien.
Rachael
Il fonctionne également pour T-SQL dans SQL Server Management Studio 2014
Vahid Amiri
44

Assurez-vous que la base de données sélectionnée est celle où se trouve la table. J'exécutais le script Master. Dans mon cas, j'ai dû passer à hr_db.

entrez la description de l'image ici

Erreur de débutant mais pourrait aider quelqu'un.

Daniel Segura
la source
4
Pour être honnête, je ne suis pas sûr que ce soit une erreur de débutant, car chaque fois que vous reconnectez le serveur, pour une raison quelconque, il passe en "maître" sans raison évidente. :)
Chris Rae
Si tel était le cas et que la requête ne qualifiait pas entièrement les noms de table, le code ne s'exécuterait pas. Je pense que l'OP décrivait une détection d'erreur faussement positive lorsque le problème que vous avez décrit n'était pas un facteur contributif. (Certainement, j'avais déjà exclu la possibilité lorsque je suis allé chercher et que je me suis retrouvé ici.)
Dodecaphone
Exactement mon problème. Il n'y a aucune indication de SMS qu'il a changé le contexte de la base de données ou tout autre indice.
Daniel Black
1
@ChrisRae: En effet, masterest défini comme la base de données par défaut pour votre connexion utilisateur. Modifiez simplement cette utilisation sp_defaultdbdans une autre base de données pour que l'autre base de données soit sélectionnée dans SSMS lorsque vous vous connectez. (Peut également être défini dans SSMS parSecurity > Logins > your user login > Properties > Default database )
AxD
36

une fois que vous avez créé un nouvel objet SQL Server, votre objet nouvellement créé n'est pas mis à jour dans le cache local IntelliSence et pour cette raison, il affiche une ligne rouge sous cet objet. Il vous suffit donc d'actualiser le cache local SSMS IntelliSence et une fois que vous l'avez actualisé,IntelliSence ajoutera automatiquement le nouvel objet créé dans le cache et la ligne rouge disparaîtra. essaye ça

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

entrez la description de l'image ici

Nagaraj S
la source
1
Je n'ai pas cette fonctionnalité ... quand j'appuie sur ctrl + shift + R rien ne change
Ibrahim Amer
4
@IbrahimAmer Votre curseur doit être dans un éditeur de requête pour que l'option de menu Intellisense soit disponible. Si l'option de menu intellisense n'est pas disponible, le raccourci ne fera rien.
Rachael
18

Dans mon cas, le cache IntelliSense répertorie les informations sur les objets pour une base de données entièrement différente. Si je cliquais sur le bouton "Nouvelle requête" dans SSMS, cela ouvrirait une requête sur mon catalogue par défaut sur le serveur et cet éditeur de requête n'utiliserait toujours que cette base de données. L'actualisation du cache n'a rien changé. Le redémarrage de SSMS n'a rien changé. Changer la base de données n'a rien changé.

J'ai fini par créer une requête en cliquant avec le bouton droit sur la base de données que je voulais réellement utiliser et en choisissant "Nouvelle requête" dans ce menu contextuel. Maintenant, SSMS utilise les objets corrects pour IntelliSense.

Lardons
la source
3
C'était aussi mon cas. Merci d'avoir partagé.
Behrooz Karjoo
1
UTILISER datbaseName GO avant que la requête ne fonctionne également dans la configuration du contexte
Behrooz Karjoo
@ BehroozKarjoo Oui, j'ai essayé. Cela ne semble pas toujours fonctionner. Si je pouvais le reproduire, je le mettrais sur Microsoft Connect ou quelque chose. Je suis sûr qu'ils le marqueraient comme WONTFIX ou quelque chose d'aussi irritant, mais je le signalerais.
Bacon Bits
Fonctionne parfaitement! Je vous remercie! :)
Sean Stayns
Redémarrez SSMS et cliquez avec le bouton droit sur la nouvelle requête a fonctionné pour moi.
Hitsa
10

Êtes-vous certain que le tableau en question existe?

Avez-vous actualisé la vue de table dans l'Explorateur d'objets? Cela peut être fait en cliquant avec le bouton droit sur le dossier "tables" et en appuyant sur la toucheF5 touche.

Vous devrez peut-être également relancer le cache Intellisense.

Cela peut être fait en suivant l'itinéraire du menu: Édition -> IntelliSense -> Actualiser le cache local

John Sansom
la source
7

La solution est:

  • Cliquez sur le menu Requête,
  • puis cliquez sur «Changer de base de données».
  • Sélectionnez votre nom de base de données approprié.

C'est tout.

Tono FRL
la source
6

Même problème avec moi quand j'ai utilisé ce problème de syntaxe résolu.

Syntaxe:

Use [YourDatabaseName]
Your Query Here

la source
4

Même après l'installation de SP3 sur SQL Server 2008 Enterprise, il s'agit toujours d'un «problème». Ctrl+ Shift+ Rcomme tout le monde l'a dit a résolu ce problème pour moi.

demmith
la source
Je n'ai pas cette fonctionnalité ... quand j'appuie sur ctrl + shift + R rien ne change
Ibrahim Amer
@IbrahimAmer Votre curseur doit être dans un éditeur de requête pour que l'option de menu Intellisense soit disponible. Si l'option de menu intellisense n'est pas disponible, le raccourci ne fera rien.
Rachael
3

Résolu pour SSMS 2016.

J'ai eu un problème similaire, mais Intellisense n'était pas dans le menu Edition.

Ce qui semblait le résoudre, c'était d'activer et de désactiver Intellisens, de faire un clic droit sur l'éditeur SQL et de cliquer sur 'Intellisense Enabled'. Cliquez de nouveau avec le bouton droit sur «Intellisense activé» pour le réactiver. Ctr Q, je fais aussi ça.

Cela a résolu le problème, et je sais également obtenir l'Intellisense dans le menu Edition.

Eric Yeoman
la source
2

J'ai juste dû fermer SMSS et le rouvrir. J'ai essayé d'actualiser le cache local et cela n'a pas fonctionné.

furtifs
la source
1

avez-vous essayé: faites un clic droit sur la base de données, puis cliquez sur "rafraîchir"

KM.
la source
Oui, j'ai essayé, je suis sûr qu'il est là, je peux ajouter des enregistrements et les modifier, etc. Je vais essayer de redémarrer.
Richbits
1

Je me rends compte que cette question a déjà été répondue, cependant, j'avais une solution différente:

Si vous écrivez un script dans lequel vous supprimez les tables sans les recréer, ces tables s'afficheront comme manquantes si vous essayez de les référencer plus tard.

Remarque: Cela ne se produira pas avec un script qui est constamment exécuté, mais il est parfois plus facile d'avoir un script avec des requêtes à ré-référencer que de les taper à chaque fois.

Troy Loberger
la source
0

J'ai rencontré le problème avec: ODBC et SQL-Server-Authentication dans ODBC et Firedac-Connection

Solution: j'ai dû définir le paramètre MetaDefSchema sur sqlserver nom d'utilisateur: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Le wikidoc sais: MetaDefSchema = Nom de schéma par défaut. Le code temporel de conception >> exclut << !! le nom de schéma de l'objet SQL-Server-Authenticatoinname s'il est égal à MetaDefSchema.

sans paramètre, le codeur automatique crée: dbname.username.tablename -> nom d'objet invalide

En définissant MetaDefSchema sur sqlserver-username: dbname.tablename -> fonctionne!

Voir également l'embarcadero-doc sur: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

J'espère que ça aide quelqu'un d'autre ..

salutations, Lutz

Lutz
la source
0

Dans azure data studio, appuyez sur "cmd + shift + p" et tapez "intellisense", puis vous verrez une option pour actualiser le cache intellisense.

Hé toi
la source
0

N'oubliez pas de créer vos migrations après avoir écrit les modèles

mgPePe
la source