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

时间:2009-09-01 13:36:53

标签: sql-server ssms

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

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

我可以看到intellisense列出的表与没有表的表之间没有区别。如果我手动输入dbo.Room,则会加下划线,错误为

  

无效的对象名称'dbo.Room'..

我在设置表时错过了什么吗?

更新:我已尝试刷新表格列表(多次)

19 个答案:

答案 0 :(得分:623)

尝试:

编辑 - > IntelliSense - > 刷新本地缓存

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

注意:您的光标必须位于查询编辑器中才能看到IntelliSense菜单。

答案 1 :(得分:71)

Ctrl + Shift + R 也会刷新management studio 2008中的intellisense。

答案 2 :(得分:34)

创建新的SQL Server对象后,新创建的对象不会在IntelliSence Local Cache中更新,因此,它会在该对象下显示红线。因此,您只需刷新SSMS IntelliSence Local Cache,一旦刷新它,IntelliSence将自动在缓存中添加新创建的对象,红线将消失。试试这个

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

enter image description here

答案 3 :(得分:17)

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

enter image description here

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

答案 4 :(得分:17)

就我而言,IntelliSense缓存列出了完全不同的数据库的对象信息。如果我点击了"新查询"在SSMS中的按钮,它将打开一个查询到我在服务器上的默认目录,该查询编辑器将始终只使用该数据库。刷新缓存并没有改变任何东西。重新启动SSMS并没有改变任何事情。更改数据库并没有改变任何内容。

我最后通过右键单击我实际想要使用的数据库并选择" New Query"来创建查询。从该上下文菜单。 现在 SSMS使用正确的IntelliSense对象。

答案 5 :(得分:10)

您确定有问题的表存在吗?

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

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

这可以通过以下菜单路线来完成:编辑 - >智能感知 - >刷新本地缓存

答案 6 :(得分:8)

解决方案是:

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

就是这样。

答案 7 :(得分:4)

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

答案 8 :(得分:3)

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

语法:

Use [YourDatabaseName]
Your Query Here

答案 9 :(得分:2)

解决SSMS 2016。

有类似的问题,但智能感知不在编辑菜单中。

似乎解决了什么问题是打开和关闭Intellisens,右键单击SQL编辑器并单击“Intellisense Enabled”。再次右键单击“Intellisense Enabled”再次打开它。 Ctr Q,我也这样做。

这解决了这个问题,而且我也知道在编辑菜单上获取Intellisense。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

我只需要关闭SMSS并重新打开它。我尝试了刷新本地缓存,但没有用。

答案 12 :(得分:1)

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

如果您正在编写一个删除表而不重新创建表的脚本,那么如果您稍后尝试引用它们,这些表将显示为缺失。

注意:对于经常运行的脚本不会发生这种情况,但有时候让脚本查询的次数比每次输入更容易。

答案 13 :(得分:1)

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

答案 14 :(得分:0)

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

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

维基百科说: 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)

希望,它可以帮助其他人。

致谢,卢茨

答案 15 :(得分:0)

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

答案 16 :(得分:0)

对我来说,我已经重命名了

[Database_LS].[schema].[TableView]

[Database_LS].[Database].[schema].[TableView]

答案 17 :(得分:0)

我正在研究 Azure SQL Server。为了存储我使用表值参数的数据 喜欢

DECLARE @INTERMEDIATE_TABLE3 TABLE { 
     x int;
 }

我发现了写查询的错误

SELECT
    *
FROM 
    [@INTERMEDIATE_TABLE3]
WHERE 
    [@INTERMEDIATE_TABLE3].[ConsentDefinitionId] = 3

在查询列时,可以用大括号 [@INTERMEDIATE_TABLE3].[ConsentDefinitionId] 包裹它,但是当只引用表值参数时,不应该有参数。所以它应该被用作@INTERMEDIATE_TABLE3

所以现在必须把代码改成

SELECT
    *
FROM 
    @INTERMEDIATE_TABLE3
WHERE 
    [@INTERMEDIATE_TABLE3].[ConsentDefinitionId] = 3

答案 18 :(得分:0)

就我而言,我试图更改数据库中不存在的存储过程,在创建它并刷新本地缓存后,它起作用了