sql server无效的对象名称-但表在SSMS表列表中列出


336

我正在尝试Stored Procedure为新创建的数据库创建一个。但是,SSMS智能感知不能识别已创建的表的一半以上。

例如,在表格下方的左列中,我有一个表格dbo.Room,当我dbo.在新的查询窗口中键入“ ”时,该表格未列出,实际上,在37个表格中仅列出了17个。

我看不出intellisense列出的表与未列出的表之间没有区别。如果我手动键入dbo.Room,则带下划线,错误为

无效的对象名称“ dbo.Room”。

我在摆桌子上错过了什么吗?

更新:我尝试刷新表列表(几次)


11
有效的答案:[DatabaseName].[Schema].[TableName] SO:无效的对象名称sql
Ivan Chau

Answers:


703

尝试:

Edit-> IntelliSense->Refresh Local Cache

这应该刷新Intellisense缓存的数据,以提供预输入支持和预执行错误检测。

注意:您的光标必须在查询编辑器中才能显示IntelliSense菜单。


8
Intellisense / SSMS是否会定期刷新自身?还是必须始终是手动过程?(我的猜测基于2005年的SSMS,但总能寄希望于此。)
Philip Kelley

37
令人难以置信的是,2012年您需要这样做。他们不能每隔几秒钟自动更新Intellisense吗?
马修·洛克

6
这可能需要每隔几秒钟命中数据库并提取表/视图定义。
jinglesthula 2012年

8
注意:您的光标必须在查询编辑器中才能显示IntelliSense菜单。
bradlis7 2014年

5
@jinglesthula:这样可以省去打数据库服务器的麻烦!
Paul

80

Ctrl+ Shift+也R刷新了Management Studio 2008中的intellisense。


我没有此功能...当我按Ctrl + Shift + R时,没有任何变化
Ibrahim Amer

4
@IbrahimAmer您的光标必须在查询编辑器中,才能使用Intellisense菜单选项。如果intellisense菜单选项不可用,则快捷方式将无效。
Rachael

它也适用于SQL Server Management Studio 2014中的T-SQL
Vahid Amiri,

44

确保所选的数据库是表所在的数据库。我在上运行脚本Master。就我而言,我不得不切换到hr_db

在此处输入图片说明

新秀的错误,但是,可以帮助某人。


4
老实说,我不确定这是菜鸟的错误,因为每当您重新连接服务器时,由于某种原因,它就会无缘无故地切换到“主服务器”。:)
克里斯·雷

如果真是这样,并且查询没有完全限定表名,则该代码将无法执行。我认为,当您描述的问题不是造成问题的因素时,OP会描述误报错误检测。(当然,当我去这里搜索并
打结

完全是我的问题。SMS没有迹象表明它已更改数据库上下文或任何其他线索。
丹尼尔·布莱克

1
@ChrisRae:这是因为它master被设置为用户登录的默认数据库。只需将使用的sp_defaultdb数据库更改为登录时在SSMS中选择的另一个数据库即可。(也可以通过在SSMS中进行设置Security > Logins > your user login > Properties > Default database
AxD

36

一旦创建了新的SQL Server对象,您新创建的对象就不会在IntelliSence本地缓存中得到更新,因此,它在该对象下面显示了红线。因此,您只需要刷新SSMS IntelliSence本地缓存,刷新后,IntelliSence它将自动在缓存中添加新创建的对象,并且红线将消失。尝试这个

Edit -> IntelliSense -> Refresh Local CacheCtrl+ Shift+R

在此处输入图片说明


1
我没有此功能...当我按Ctrl + Shift + R时,没有任何变化
Ibrahim Amer

4
@IbrahimAmer您的光标必须在查询编辑器中,才能使用Intellisense菜单选项。如果intellisense菜单选项不可用,则快捷方式将无效。
Rachael

18

就我而言,IntelliSense缓存正在列出完全不同的数据库的对象信息。如果单击SSMS中的“新建查询”按钮,它将打开对服务器上我的默认目录的查询,并且该查询编辑器将始终仅使用该数据库。刷新缓存没有任何改变。重新启动SSMS并没有任何改变。更改数据库没有任何改变。

我最终通过右键单击我实际要使用的数据库并从该上下文菜单中选择“新建查询”来创建查询。 现在, SSMS将正确的对象用于IntelliSense。


3
这也是我的情况。感谢分享。
Behrooz Karjoo,2015年

1
在查询之前使用datbaseName GO还可用于设置上下文
Behrooz Karjoo 2015年

@BehroozKarjoo是的,我尝试过。它似乎并不总是有效。如果我可以重现它,则可以将其放在Microsoft Connect上。我确定他们会将其标记为WONTFIX或同样令人讨厌的东西,但我会举报。
培根钻头

做得完美!谢谢!:)
肖恩·斯坦斯

重新启动SSMS,然后右键单击对我有用的新查询。
Hitsa

10

您确定所讨论的表存在吗?

您是否在对象资源管理器中刷新过表格视图?可以通过右键单击“表格”文件夹并按F5按键来完成。

您可能还需要刷新Intellisense缓存。

这可以通过遵循菜单路径来完成:编辑-> IntelliSense->刷新本地缓存


7

解决方案是:

  • 点击菜单查询,
  • 然后点击“更改数据库”。
  • 选择适当的数据库名称。

而已。


6

当我使用此语法问题解决时,我遇到了同样的问题。

句法:

Use [YourDatabaseName]
Your Query Here

4

即使在将SP3安装到SQL Server 2008 Enterprise之后,这仍然是一个“问题”。Ctrl+ Shift+ R就像大家一直说解决了这个问题对我来说。


我没有此功能...当我按Ctrl + Shift + R时,没有任何变化
Ibrahim Amer

@IbrahimAmer您的光标必须在查询编辑器中,才能使用Intellisense菜单选项。如果intellisense菜单选项不可用,则快捷方式将无效。
Rachael

3

为SSMS 2016解决。

遇到类似的问题,但是Intellisense不在“编辑”菜单中。

似乎可以解决的问题是打开和关闭Intellisens,右键单击SQL编辑器,然后单击“启用Intellisense”。再次右键单击“已启用智能感应”以再次将其重新打开。Ctr Q,我也这样做。

这解决了问题,我也知道在“编辑”菜单上获得了Intellisense。


2

我只需要关闭SMSS并重新打开即可。我尝试了“刷新本地缓存”,但没有成功。


1

您是否尝试过:右键单击数据库,然后单击“刷新”


是的,我已经尝试过了,我确定它在那里,我可以添加记录并进行修改等。只需从dbo.Room中执行Select *,尽管我还有下划线,但它会输出表的内容。我要尝试重新启动。
Richbits

1

我知道这个问题已经得到解答,但是,我有一个不同的解决方案:

如果您正在编写一个脚本,在其中放置表而不重新创建它们,则稍后尝试引用它们时,这些表将显示为丢失。

注意:对于经常运行的脚本来说,这不会发生,但是有时候让脚本包含查询内容要比每次键入都要容易。


0

我遇到了以下问题:ODBC和Firedac-Connection中的ODBC和SQL-Server-Authentication

解决方案:我必须将Param MetaDefSchema设置为sqlserver用户名:FDConnection1.Params.AddPair('MetaDefSchema',self.FDConnection1.Params.UserName);

Wikidoc说:MetaDefSchema =默认模式名称。设计时间代码>>排除<< !! 对象SQL-Server-Authenticatoinname中的架构名称(如果它等于MetaDefSchema)。

没有设置,自动编码器将创建:dbname.username.tablename->无效的对象名

通过将MetaDefSchema设置为sqlserver-username:dbname.tablename->起作用了!

另请参见embarcadero-doc,网址为:http ://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC

希望对别人有帮助。

问候,卢茨


0

在azure数据工作室中,按“ cmd + shift + p”并键入“ intellisense”,然后您将看到一个刷新智能感知缓存的选项。


0

编写模型后,不要忘记创建迁移

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.