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

336

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

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

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

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

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

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

Richbits
источник
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.

Zielyn
источник
У меня нет этой функции ... когда я нажимаю 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Как все было изречение решить эту проблему для меня.

demmith
источник
У меня нет этой функции ... когда я нажимаю Ctrl + Shift + R, ничего не меняется
Ибрагим Амер
@IbrahimAmer Ваш курсор должен быть в редакторе запросов, чтобы опция меню Intellisense была доступна. Если опция меню intellisense недоступна, ярлык ничего не сделает.
Рэйчел
3

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

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

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

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

Эрик Йоман
источник
2

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

stealthysnacks
источник
1

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

KM.
источник
Да, я пробовал это, я уверен, что он есть, я могу добавлять записи, изменять и т. Д. Просто сделал 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

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

mgPePe
источник