SQL Server ungültiger Objektname - Tabellen werden jedoch in der Liste der SSMS-Tabellen aufgeführt

335

Ich versuche, eine Stored Procedurefür eine neu erstellte Datenbank zu erstellen . Der SSMSIntellisense erkennt jedoch nicht mehr als die Hälfte der erstellten Tabellen.

Wenn ich zum Beispiel in der linken Spalte unter Tabellen eine Tabelle habe dbo.Roomund " dbo." in das neue Abfragefenster eingebe, wird diese Tabelle nicht aufgelistet. Tatsächlich werden nur 17 von 37 Tabellen aufgelistet.

Ich kann keinen Unterschied zwischen den von Intellisense aufgelisteten und den nicht von Intellisense aufgelisteten Tabellen feststellen. Wenn ich dbo.Room manuell eingebe, wird es mit einem Fehler von unterstrichen

Ungültiger Objektname 'dbo.Room' ..

Habe ich beim Aufstellen der Tische etwas verpasst?

UPDATE: Ich habe versucht, die Tabellenliste (mehrmals) zu aktualisieren.

Richbits
quelle
11
Antwort, die funktioniert: [DatabaseName].[Schema].[TableName] SO: Ungültiger Objektname sql
Ivan Chau

Antworten:

703

Versuchen:

Edit-> IntelliSense->Refresh Local Cache

Dadurch sollten die von Intellisense zwischengespeicherten Daten aktualisiert werden, um Typeahead-Unterstützung und Fehlererkennung vor der Ausführung bereitzustellen.

HINWEIS: Ihr Cursor muss sich im Abfrageeditor befinden, damit das IntelliSense-Menü angezeigt wird.

Adam Robinson
quelle
8
Aktualisiert sich Intellisense / SSMS regelmäßig? Oder muss dies immer ein manueller Vorgang sein? (Ich habe meine Vermutung basierend auf SSMS im Jahr 2005, aber man kann immer hoffen.)
Philip Kelley
37
Unglaublich, dass Sie dies 2012 tun müssen. Könnten sie Intellisense nicht alle paar Sekunden automatisch aktualisieren?
Matthew Lock
6
Dazu müssen Sie möglicherweise alle paar Sekunden auf die Datenbank zugreifen und die Tabellen- / Ansichtsdefinitionen abrufen.
Jinglesthula
8
HINWEIS: Ihr Cursor muss sich im Abfrageeditor befinden, damit das IntelliSense-Menü angezeigt wird.
Bradlis7
5
@jinglesthula: Das würde mir ersparen , den Datenbankserver zu treffen!
Paul
80

Ctrl+ Shift+ RAuffrischungen IntelliSense in Management Studio 2008 als auch.

Zielyn
quelle
Ich habe diese Funktion nicht ... wenn ich Strg + Umschalt + R drücke, ändert sich nichts
Ibrahim Amer
4
@IbrahimAmer Ihr Cursor muss sich in einem Abfrageeditor befinden, damit die Intellisense-Menüoption verfügbar ist. Wenn die Intellisense-Menüoption nicht verfügbar ist, führt die Verknüpfung nichts aus.
Rachael
Es funktioniert auch für T-SQL in SQL Server Management Studio 2014
Vahid Amiri
44

Stellen Sie sicher, dass die ausgewählte Datenbank diejenige ist, in der sich die Tabelle befindet. Ich habe das Skript ausgeführt Master. In meinem Fall musste ich zu wechseln hr_db.

Geben Sie hier die Bildbeschreibung ein

Rookie Fehler könnte aber jemandem helfen.

Daniel Segura
quelle
4
Ich bin mir nicht sicher, ob es ein Anfängerfehler ist, um ehrlich zu sein, denn wenn Sie den Server erneut anschließen, wechselt er aus irgendeinem Grund ohne offensichtlichen Grund zu "Master". :)
Chris Rae
Wenn dies der Fall wäre und die Abfrage die Tabellennamen nicht vollständig qualifizieren würde, würde der Code nicht ausgeführt. Ich glaube, das OP hat die Erkennung falsch positiver Fehler beschrieben, als das von Ihnen beschriebene Problem keinen beitragenden Faktor darstellte. (Sicherlich hatte ich die Möglichkeit bereits ausgeschlossen, als ich auf die Suche ging und hier
landete
Genau mein Problem. SMS gibt keinen Hinweis darauf, dass der Datenbankkontext oder ein anderer Hinweis geändert wurde.
Daniel Black
1
@ChrisRae: Das masterliegt daran, dass die Standarddatenbank für Ihre Benutzeranmeldung festgelegt ist. Ändern Sie dies einfach sp_defaultdbin eine andere Datenbank, damit die andere Datenbank beim Anmelden in SSMS ausgewählt wird. (Kann auch in SSMS von festgelegt werden Security > Logins > your user login > Properties > Default database)
AxD
36

Sobald Sie ein neues SQL Server-Objekt erstellt haben, wird Ihr neu erstelltes Objekt im lokalen IntelliSence-Cache nicht aktualisiert. Aus diesem Grund wird unter diesem Objekt eine rote Linie angezeigt. Sie müssen also nur den lokalen SSMS IntelliSence-Cache aktualisieren. Sobald Sie ihn aktualisiert haben, IntelliSencewird automatisch ein neu erstelltes Objekt in den Cache eingefügt, und die rote Linie verschwindet. Versuche dies

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

Geben Sie hier die Bildbeschreibung ein

Nagaraj S.
quelle
1
Ich habe diese Funktion nicht ... wenn ich Strg + Umschalt + R drücke, ändert sich nichts
Ibrahim Amer
4
@IbrahimAmer Ihr Cursor muss sich in einem Abfrageeditor befinden, damit die Intellisense-Menüoption verfügbar ist. Wenn die Intellisense-Menüoption nicht verfügbar ist, führt die Verknüpfung nichts aus.
Rachael
18

In meinem Fall listete der IntelliSense-Cache Objektinformationen für eine völlig andere Datenbank auf. Wenn ich in SSMS auf die Schaltfläche "Neue Abfrage" klickte, wurde eine Abfrage für meinen Standardkatalog auf dem Server geöffnet, und dieser Abfrageeditor verwendete immer nur diese Datenbank. Das Aktualisieren des Caches hat nichts geändert. Der Neustart von SSMS hat nichts geändert. Das Ändern der Datenbank hat nichts geändert.

Am Ende habe ich eine Abfrage erstellt, indem ich mit der rechten Maustaste auf die Datenbank geklickt habe, die ich tatsächlich verwenden wollte, und in diesem Kontextmenü "Neue Abfrage" ausgewählt habe. Jetzt verwendet SSMS die richtigen Objekte für IntelliSense.

Speckwürfel
quelle
3
Dies war auch mein Fall. Danke für das Teilen.
Behrooz Karjoo
1
USE datbaseName GO vor der Abfrage funktioniert auch beim Einrichten des Kontexts
Behrooz Karjoo
@BehroozKarjoo Ja, das habe ich versucht. Es scheint nicht immer zu funktionieren. Wenn ich es reproduzieren könnte, würde ich es auf Microsoft Connect oder so setzen. Ich bin sicher, sie würden es als WONTFIX oder etwas ähnlich Irritierendes markieren, aber ich würde es melden.
Bacon Bits
Hat perfekt funktioniert! Vielen Dank! :)
Sean Stayns
Starten Sie SSMS neu und klicken Sie mit der rechten Maustaste auf Neue Abfrage.
Hitsa
10

Sind Sie sicher, dass die betreffende Tabelle vorhanden ist?

Haben Sie die Tabellenansicht im Objekt-Explorer aktualisiert? Klicken Sie dazu mit der rechten Maustaste auf den Ordner "Tabellen" und drücken Sie die F5Taste.

Möglicherweise müssen Sie auch den Intellisense-Cache erneut aktualisieren.

Befolgen Sie dazu die Menüroute: Bearbeiten -> IntelliSense -> Lokalen Cache aktualisieren

John Sansom
quelle
7

Die Lösung ist:

  • Klicken Sie auf das Menü Abfrage,
  • Klicken Sie dann auf "Datenbank ändern".
  • Wählen Sie Ihren geeigneten Datenbanknamen.

Das ist es.

Tono FRL
quelle
6

Das gleiche Problem mit mir, als ich dieses Syntaxproblem verwendete, wurde gelöst.

Syntax:

Use [YourDatabaseName]
Your Query Here

quelle
4

Auch nach der Installation von SP3 auf SQL Server 2008 Enterprise ist dies immer noch ein "Problem". Ctrl+ Shift+ RWie jeder gesagt hat , dieses Problem für mich gelöst.

Demmith
quelle
Ich habe diese Funktion nicht ... wenn ich Strg + Umschalt + R drücke, ändert sich nichts
Ibrahim Amer
@IbrahimAmer Ihr Cursor muss sich in einem Abfrageeditor befinden, damit die Intellisense-Menüoption verfügbar ist. Wenn die Intellisense-Menüoption nicht verfügbar ist, führt die Verknüpfung nichts aus.
Rachael
3

Gelöst für SSMS 2016.

Hatte ein ähnliches Problem, aber Intellisense war nicht im Menü Bearbeiten.

Was das Problem zu beheben schien, war das Ein- und Ausschalten von Intellisens. Klicken Sie mit der rechten Maustaste auf den SQL-Editor und klicken Sie auf "Intellisense aktiviert". Klicken Sie erneut mit der rechten Maustaste auf "Intellisense aktiviert", um es wieder einzuschalten. Ctr Q, ich mache das auch.

Dies löste das Problem und ich weiß auch, dass der Intellisense im Menü Bearbeiten angezeigt wird.

Eric Yeoman
quelle
2

Ich musste nur SMSS schließen und erneut öffnen. Ich habe versucht, den lokalen Cache zu aktualisieren, und das hat nicht funktioniert.

Stealthysnacks
quelle
1

Haben Sie versucht: Klicken Sie mit der rechten Maustaste auf die Datenbank und klicken Sie auf "Aktualisieren".

KM.
quelle
Ja, ich habe das versucht, ich bin sicher, es ist da, ich kann Datensätze hinzufügen und ändern usw. Ich habe gerade ein Select * von dbo.Room ausgeführt und während ich noch die Unterstreichung habe, hat es den Inhalt der Tabelle ausgegeben. Ich werde einen Neustart versuchen.
Richbits
1

Mir ist klar, dass diese Frage bereits beantwortet wurde, aber ich hatte eine andere Lösung:

Wenn Sie ein Skript schreiben, in dem Sie die Tabellen löschen, ohne sie neu zu erstellen, werden diese Tabellen als fehlend angezeigt, wenn Sie später versuchen, auf sie zu verweisen.

Hinweis: Dies ist bei einem Skript, das ständig ausgeführt wird, nicht der Fall. Manchmal ist es jedoch einfacher, ein Skript mit Abfragen zum erneuten Referenzieren zu haben, als sie jedes Mal einzugeben.

Troy Loberger
quelle
0

Ich bin auf das Problem gestoßen mit: ODBC- und SQL-Server-Authentifizierung in ODBC und Firedac-Connection

Lösung: Ich musste das Param MetaDefSchema auf den Benutzernamen sqlserver setzen: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Das Wikidoc lautet: MetaDefSchema = Standardschemaname. Der Entwurfszeitcode >> schließt << aus !! Der Schemaname aus dem Objekt SQL-Server-Authenticatoinname, wenn er MetaDefSchema entspricht.

Ohne Einstellung erstellt der automatische Codierer: Datenbankname.Benutzername.Tabellenname -> ungültiger Objektname

Wenn Sie MetaDefSchema auf sqlserver-username setzen: dbname.tabellenname -> funktioniert!

Siehe auch das Embarcadero-Dokument unter: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

Hoffe, es hilft jemand anderem ..

Grüße, Lutz

Lutz
quelle
0

Drücken Sie im Azure Data Studio "cmd + shift + p" und geben Sie "Intellisense" ein. Anschließend wird eine Option zum Aktualisieren des Intellisense-Cache angezeigt.

Hallo du
quelle
0

Vergessen Sie nicht, Ihre Migrationen nach dem Schreiben der Modelle zu erstellen

mgPePe
quelle