Неверное имя объекта сервера SQL - но таблицы перечислены в списке таблиц SSMS


336

Я пытаюсь создать Stored Procedureновую базу данных. Однако SSMSintellisense не распознает более половины созданных таблиц.

Например, в то время как в левом столбце под таблицами у меня есть таблица dbo.Room, когда я набираю « dbo.» в новом окне запроса, эта таблица не отображается, фактически только 17 из 37 таблиц перечислены.

Я не вижу разницы между таблицами, перечисленными intellisense, и теми, которые нет. Если я вручную набираю dbo.Room, это подчеркивается с ошибкой

Неверное имя объекта 'dbo.Room' ..

Я что-то упустил при настройке столов?

ОБНОВЛЕНИЕ: я попытался обновить список таблиц (несколько раз)


11
Ответ, который работает: [DatabaseName].[Schema].[TableName] SO: Неверное имя объекта sql
Иван Чау

Ответы:


703

Пытаться:

Edit -> IntelliSense ->Refresh Local Cache

Это должно обновить данные, кэшированные Intellisense, чтобы обеспечить поддержку заголовков и обнаружение ошибок перед выполнением.

ПРИМЕЧАНИЕ. Ваш курсор должен находиться в редакторе запросов, чтобы меню IntelliSense было видно.


8
Периодически обновляется ли Intellisense / SSMS? Или это всегда должен быть ручной процесс? (У меня есть предположение, основанное на SSMS в 2005 году, но всегда можно надеяться.)
Филипп Келли

37
Невероятно, что в 2012 году вам нужно это сделать. Разве они не могут обновлять Intellisense каждые несколько секунд автоматически?
Мэтью Лок

6
Это может потребовать попадания в базу данных и получения определений таблицы / представления каждые несколько секунд.
Jinglesthula

8
ПРИМЕЧАНИЕ. Ваш курсор должен находиться в редакторе запросов, чтобы меню IntelliSense было видно.
bradlis7

5
@jinglesthula: Это спасет меня от попадания на сервер базы данных!
Пол

80

Ctrl+ Shift+ Rобновляет intellisense и в Management Studio 2008.


У меня нет этой функции ... когда я нажимаю Ctrl + Shift + R, ничего не меняется
Ибрагим Амер

4
@IbrahimAmer Ваш курсор должен быть в редакторе запросов, чтобы опция меню Intellisense была доступна. Если опция меню intellisense недоступна, ярлык ничего не сделает.
Рэйчел

Это также работает для T-SQL в SQL Server Management Studio 2014
Вахид Амири

44

Убедитесь, что выбранная БД является той, где находится таблица. Я запускал скрипт Master. В моем случае мне пришлось переключиться на hr_db.

введите описание изображения здесь

Ошибка новичка, но, может помочь кому-то.


4
Я не уверен, что это ошибка новичка, если честно, так как всякий раз, когда вы переподключаете сервер, он по какой-то причине переключается на «master» без видимой причины. :)
Крис Рей

Если бы это было так, и запрос не полностью определил имена таблиц, код не был бы выполнен. Я полагаю, что в ОП описывалось обнаружение ложноположительных ошибок, когда описанная вами проблема не способствовала. (Конечно, я уже исключил такую ​​возможность, когда отправился на поиски и попал сюда).
Додекафон

Именно моя проблема. В SMS нет никаких указаний на то, что он изменил контекст базы данных или какую-либо другую подсказку.
Даниэль Блэк

1
@ChrisRae: Это потому, что masterустановлен как база данных по умолчанию для вашего логина пользователя. Просто измените его, используя sp_defaultdbдругую базу данных, чтобы другая база данных была выбрана в SSMS при входе в систему (также может быть установлена ​​в Security > Logins > your user login > Properties > Default database
SSMS

36

после создания нового объекта SQL Server вновь созданный объект не обновляется в локальном кэше IntelliSence, и поэтому под ним отображается красная линия. Так что вам просто нужно обновить локальный кэш SSMS IntelliSence и, как только вы обновите его, IntelliSenceавтоматически добавит вновь созданный объект в кеш, и красная линия исчезнет. попробуй это

Edit -> IntelliSense -> Refresh Local Cache или Ctrl+ Shift+R

введите описание изображения здесь


1
У меня нет этой функции ... когда я нажимаю Ctrl + Shift + R, ничего не меняется
Ибрагим Амер

4
@IbrahimAmer Ваш курсор должен быть в редакторе запросов, чтобы опция меню Intellisense была доступна. Если опция меню intellisense недоступна, ярлык ничего не сделает.
Рэйчел

18

В моем случае кэш IntelliSense выводил информацию об объектах для совершенно другой базы данных. Если бы я нажал кнопку «Новый запрос» в SSMS, он открыл бы запрос к моему каталогу по умолчанию на сервере, и этот редактор запросов всегда использовал бы только эту базу данных. Обновление кеша ничего не изменило. Перезапуск SSMS ничего не изменил. Изменение базы данных ничего не изменило.

В итоге я создал запрос, щелкнув правой кнопкой мыши базу данных, которую я на самом деле хотел использовать, и выбрав «Новый запрос» в этом контекстном меню. Теперь SSMS использует правильные объекты для IntelliSense.


3
Это был и мой случай. Спасибо, что поделился.
Behrooz Karjoo

1
ИСПОЛЬЗОВАНИЕ datbaseName GO перед запросом также работает при настройке контекста
Behrooz Karjoo

@BehroozKarjoo Да, я попробовал это. Кажется, это не всегда работает. Если бы я мог воспроизвести это, я поместил бы это в Microsoft Connect или что-то еще. Я уверен, что они отметят это как WONTFIX или что-то такое же раздражающее, но я бы сообщил об этом.
Бекон Биты

Работал отлично! Спасибо! :)
Шон Стейнс

Перезапустите SSMS и щелкните правой кнопкой мыши новый запрос работал для меня.
Hitsa

10

Вы уверены, что данная таблица существует?

Вы обновили представление таблицы в обозревателе объектов? Это можно сделать, щелкнув правой кнопкой мыши папку «таблицы» и нажавF5 клавишу.

Вам также может понадобиться обновить кэш Intellisense.

Это можно сделать, следуя по маршруту меню: Правка -> IntelliSense -> Обновить локальный кэш


7

Решение:

  • Нажмите меню Query,
  • затем нажмите «Изменить базу данных».
  • Выберите подходящее имя базы данных.

Вот и все.


6

Та же проблема со мной, когда я использовал эту проблему синтаксиса решена.

Синтаксис:

Use [YourDatabaseName]
Your Query Here

4

Даже после установки пакета обновления 3 (SP3) для SQL Server 2008 Enterprise это все еще остается проблемой. Ctrl+ Shift+ , RКак все было изречение решить эту проблему для меня.


У меня нет этой функции ... когда я нажимаю Ctrl + Shift + R, ничего не меняется
Ибрагим Амер

@IbrahimAmer Ваш курсор должен быть в редакторе запросов, чтобы опция меню Intellisense была доступна. Если опция меню intellisense недоступна, ярлык ничего не сделает.
Рэйчел

3

Решено для SSMS 2016.

Была похожая проблема, но Intellisense не было в меню «Правка».

То, что, казалось, исправило это, включало и выключало Intellisens, щелкните правой кнопкой мыши на редакторе SQL и выберите «Intellisense Enabled». Снова щелкните правой кнопкой мыши на «Intellisense Enabled», чтобы снова включить его. Ctr Q, я тоже так делаю.

Это решило проблему, а также я знаю, получить Intellisense в меню Edit.


2

Я просто должен был закрыть SMSS и снова открыть его. Я попытался обновить локальный кэш, и это не сработало.


1

Вы пробовали: щелкните правой кнопкой мыши базу данных и нажмите «обновить»


Да, я пробовал это, я уверен, что он есть, я могу добавлять записи, изменять и т. Д. Просто сделал Select * из dbo.Room, и, хотя у меня все еще есть подчеркивание, он вывел содержимое таблицы. Я попробую перезагрузить.
Ричбитс

1

Я понимаю, что на этот вопрос уже был дан ответ, однако у меня было другое решение:

Если вы пишете сценарий, в котором вы удаляете таблицы, не воссоздавая их, эти таблицы будут отображаться как отсутствующие, если вы попытаетесь сослаться на них позже.

Примечание. Этого не случится со сценарием, который постоянно запускается, но иногда проще иметь сценарий с запросами на повторение, чем каждый раз вводить их.


0

Я столкнулся с проблемой с: ODBC и SQL-Server-аутентификация в ODBC и Firedac-Connection

Решение: мне пришлось установить для параметра MetaDefSchema Param значение sqlserver: имя пользователя: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

Википедия sais: MetaDefSchema = Имя схемы по умолчанию. Код времени проектирования >> исключает << !! имя схемы из объекта SQL-Server-Authenticatoinname, если оно равно MetaDefSchema.

без настройки автоматический кодер создает: dbname.username.tablename -> неверное имя объекта

С установкой MetaDefSchema в sqlserver-username: dbname.tablename -> работает!

См. Также документ embarcadero по адресу: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

Надеюсь, это поможет кому-то еще ..

С уважением, Лутц


0

В Azure Data Studio нажмите «cmd + shift + p» и введите «intellisense», тогда вы увидите возможность обновить кэш intellisense.


0

Не забудьте создать свои миграции после написания моделей

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.