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)


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.


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.


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.


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


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.


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


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.


6

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

Syntaxe:

Use [YourDatabaseName]
Your Query Here

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.


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.


2

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


1

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


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.


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


0

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


0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.