serwer sql niepoprawna nazwa obiektu - ale tabele są wymienione na liście tabel SSMS


336

Próbuję utworzyć Stored Proceduredla nowo utworzonej bazy danych. Jednak SSMSintellisense nie rozpoznaje ponad połowę tabel, które zostały utworzone.

Na przykład podczas gdy w lewej kolumnie pod tabelami mam tabelę dbo.Room, gdy wpisuję „ dbo.” w nowym oknie zapytania, tabela ta nie jest wymieniona, w rzeczywistości wymieniono tylko 17 z 37 tabel.

Nie widzę żadnej różnicy między tabelami wymienionymi przez intellisense a tymi nie. Jeśli ręcznie wpisuję dbo.Room, jest to podkreślone, z błędem

Nieprawidłowa nazwa obiektu „dbo.Room” ..

Czy coś przeoczyłem przy ustawianiu stołów?

AKTUALIZACJA: Próbowałem odświeżyć listę tabel (kilka razy)


11
Odpowiedź, która działa: [DatabaseName].[Schema].[TableName] SO: Nieprawidłowa nazwa obiektu sql
Ivan Chau

Odpowiedzi:


703

Próbować:

Edit-> IntelliSense->Refresh Local Cache

Powinno to odświeżyć dane buforowane przez Intellisense, aby zapewnić obsługę TypeAhead i wykrywanie błędów przed wykonaniem.

UWAGA: Kursor musi znajdować się w edytorze zapytań, aby menu IntelliSense było widoczne.


8
Czy Intellisense / SSMS odświeża się okresowo? A może musi to zawsze być proces ręczny? (Zgaduję na podstawie SSMS w 2005 roku, ale zawsze można mieć nadzieję.)
Philip Kelley,

37
niewiarygodne, że w 2012 roku musisz to zrobić. Czy nie mogą aktualizować Intellisense co kilka sekund automatycznie?
Matthew Lock

6
Może to wymagać trafienia do bazy danych i pobrania definicji tabeli / widoku co kilka sekund.
jinglesthula,

8
UWAGA: Kursor musi znajdować się w edytorze zapytań, aby menu IntelliSense było widoczne.
bradlis7,

5
@jinglesthula: To uratuje mnie uderzając serwer bazy danych!
Paul

80

Ctrl+ Shift+ Rodświeża intellisense również w Management Studio 2008.


Nie mam tej funkcji ... kiedy naciskam ctrl + shift + R nic się nie zmienia
Ibrahim Amer

4
@IbrahimAmer Kursor musi znajdować się w edytorze zapytań, aby opcja menu Intellisense była dostępna. Jeśli opcja menu intellisense nie jest dostępna, skrót nic nie zrobi.
Rachael

Działa również dla T-SQL w SQL Server Management Studio 2014
Vahid Amiri,

44

Upewnij się, że wybrana baza danych to ta, w której znajduje się tabela. Uruchomiłem skrypt Master. W moim przypadku musiałem się przełączyć na hr_db.

wprowadź opis zdjęcia tutaj

Błąd nowicjusza, ale może komuś pomóc.


4
Szczerze mówiąc, nie jestem pewien, czy to błąd początkujący, ponieważ za każdym razem, gdy ponownie podłączasz serwer, z jakiegoś powodu przełącza się on na „master” bez wyraźnego powodu. :)
Chris Rae

Gdyby tak było, a zapytanie nie w pełni kwalifikowało nazwy tabel, kod nie zostałby wykonany. Uważam, że PO opisywał wykrywanie fałszywie dodatnich błędów, gdy opisany problem nie był czynnikiem przyczyniającym się. (Z pewnością już wykluczyłem taką możliwość, kiedy poszedłem szukać i znalazłem się tutaj).
Dodecaphone

Dokładnie mój problem. Z SMS-ów nic nie wynika, że ​​zmienił kontekst bazy danych, ani żadnych innych wskazówek.
Daniel Black

1
@ChrisRae: To dlatego, że masterjest ustawiony jako domyślna baza danych logowania użytkownika. Po prostu zmień to sp_defaultdbna inną bazę danych, aby inna baza danych była wybierana w SSMS po zalogowaniu. (Można również ustawić w SSMS przez Security > Logins > your user login > Properties > Default database)
AxD

36

po utworzeniu nowego obiektu SQL Server nowo utworzony obiekt nie jest aktualizowany w lokalnej pamięci podręcznej IntelliSence i dlatego pokazuje czerwoną linię pod tym obiektem. Wystarczy więc odświeżyć lokalną pamięć podręczną IntelliSence SSMS SSMS, a po odświeżeniu IntelliSenceautomatycznie doda ona nowo utworzony obiekt do pamięci podręcznej, a czerwona linia zniknie. Spróbuj tego

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

wprowadź opis zdjęcia tutaj


1
Nie mam tej funkcji ... kiedy naciskam ctrl + shift + R nic się nie zmienia
Ibrahim Amer

4
@IbrahimAmer Kursor musi znajdować się w edytorze zapytań, aby opcja menu Intellisense była dostępna. Jeśli opcja menu intellisense nie jest dostępna, skrót nic nie zrobi.
Rachael

18

W moim przypadku pamięć podręczna IntelliSense zawierała informacje o obiekcie dla zupełnie innej bazy danych. Gdybym kliknął przycisk „Nowe zapytanie” w SSMS, otworzyłoby zapytanie do mojego katalogu domyślnego na serwerze, a ten edytor zapytań zawsze używałby tylko tej bazy danych. Odświeżenie pamięci podręcznej niczego nie zmieniło. Ponowne uruchomienie SSMS nic nie zmieniło. Zmiana bazy danych niczego nie zmieniła.

Utworzyłem zapytanie, klikając prawym przyciskiem myszy bazę danych, której naprawdę chciałem użyć, i wybierając „Nowe zapytanie” z tego menu kontekstowego. Teraz SSMS używa poprawnych obiektów dla IntelliSense.


3
Tak też było w moim przypadku. Dzięki za udostępnienie.
Behrooz Karjoo,

1
USE databaseName GO przed zapytaniem działa również w konfigurowaniu kontekstu
Behrooz Karjoo

@BehroozKarjoo Tak, próbowałem tego. Nie zawsze wydaje się, że działa. Gdybym mógł to odtworzyć, umieściłbym to na Microsoft Connect lub coś takiego. Jestem pewien, że oznaczyliby to jako WONTFIX lub coś równie irytującego, ale zgłosiłbym to.
Bacon Bits

Działa idealnie! Dziękuję Ci! :)
Sean Stayns

Uruchom ponownie SSMS i zadziałało dla mnie nowe zapytanie prawym przyciskiem myszy.
Hitsa,

10

Czy jesteś pewien, że tabela istnieje?

Czy odświeżyłeś widok tabeli w Eksploratorze obiektów? Można to zrobić, klikając prawym przyciskiem myszy folder „tabele” i naciskając F5klawisz.

Konieczne może być także odświeżenie pamięci podręcznej Intellisense.

Można to zrobić, postępując zgodnie z trasą menu: Edytuj -> IntelliSense -> Odśwież lokalną pamięć podręczną


7

Rozwiązaniem jest:

  • Kliknij menu Zapytanie,
  • następnie kliknij „Zmień bazę danych”.
  • Wybierz odpowiednią nazwę bazy danych.

Otóż ​​to.


6

Ten sam problem ze mną, gdy użyłem tego problemu ze składnią, rozwiązany.

Składnia:

Use [YourDatabaseName]
Your Query Here

4

Nawet po zainstalowaniu dodatku SP3 do SQL Server 2008 Enterprise jest to nadal „problem”. Ctrl+ Shift+ Rjak wszyscy mówili, rozwiązał ten problem dla mnie.


Nie mam tej funkcji ... kiedy naciskam ctrl + shift + R nic się nie zmienia
Ibrahim Amer

@IbrahimAmer Kursor musi znajdować się w edytorze zapytań, aby opcja menu Intellisense była dostępna. Jeśli opcja menu intellisense nie jest dostępna, skrót nic nie zrobi.
Rachael

3

Rozwiązany dla SSMS 2016.

Miał podobny problem, ale Intellisense nie było w menu Edycja.

To, co wydawało się naprawić, to włączanie i wyłączanie Intellisens, kliknij prawym przyciskiem myszy edytor SQL i kliknij „Intellisense Enabled”. Kliknij ponownie prawym przyciskiem myszy na „Intellisense Enabled”, aby ponownie włączyć. Ctr Q, ja też to robię.

To rozwiązało problem, a także wiem, jak uzyskać Intellisense w menu Edycja.


2

Po prostu musiałem zamknąć SMSS i otworzyć go ponownie. Próbowałem Odśwież lokalną pamięć podręczną i to nie działało.


1

próbowałeś: kliknij bazę danych prawym przyciskiem myszy i kliknij „odśwież”


Tak, próbowałem tego, jestem pewien, że tam jest, mogę dodawać rekordy i modyfikować itp. Po prostu zrobiłem Select * z dbo.Room i chociaż nadal mam podkreślenie, wypisałem zawartość tabeli. Spróbuję zrestartować komputer.
Richbits

1

Zdaję sobie sprawę, że na to pytanie już udzielono odpowiedzi, ale miałem inne rozwiązanie:

Jeśli piszesz skrypt, w którym upuszczasz tabele bez ich ponownego tworzenia, tabele te będą wyświetlane jako brakujące, jeśli spróbujesz odwołać się do nich później.

Uwaga: Nie dzieje się tak w przypadku skryptu, który jest ciągle uruchamiany, ale czasami łatwiej jest mieć skrypt z zapytaniami, aby się do niego odwoływać, niż pisać go za każdym razem.


0

Wystąpił problem z: ODBC i uwierzytelnianiem serwera SQL w ODBC i Firedac-Connection

Rozwiązanie: Musiałem ustawić Param MetaDefSchema na nazwę użytkownika sqlserver: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Wikidoc sais: MetaDefSchema = Domyślna nazwa schematu. Kod czasu projektowania >> wyklucza << !! nazwa schematu z obiektu SQL-Server-Authenticatoinname, jeśli jest równa MetaDefSchema.

bez ustawienia automatyczny program kodujący tworzy: dbname.username.tablename -> niepoprawna nazwa obiektu

Z ustawieniem MetaDefSchema na sqlserver-username: dbname.tablename -> działa!

Zobacz także dokument embarcadero na: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

Mam nadzieję, że pomaga komuś innemu ...

pozdrowienia, Lutz


0

W lazurowym studiu danych naciśnij „cmd + shift + p” i wpisz „intellisense”, wtedy zobaczysz opcję odświeżenia pamięci podręcznej intellisense.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.