【问题标题】:sql server invalid object name - but tables are listed in SSMS tables listsql server 无效的对象名称 - 但表列在 SSMS 表列表中
【发布时间】:2010-11-24 15:41:56
【问题描述】:

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

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

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

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

我在设置表格时是否遗漏了什么?

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

【问题讨论】:

标签: sql-server ssms


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我正在研究 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
    

    【讨论】:

      【解决方案3】:

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

      [Database_LS].[schema].[TableView]
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          在 azure data studio 中按“cmd+shift+p”并输入“intellisense”,然后你会看到一个刷新 intellisense 缓存的选项。

          【讨论】:

            【解决方案6】:

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

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

            维基文档 sais : MetaDefSchema=默认模式名称。设计时间码 >>excludes

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

            将 MetaDefSchema 设置为 sqlserver-username : dbname.tablename -> 有效!

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

            希望,它可以帮助别人..

            问候,卢茨

            【讨论】:

              【解决方案7】:

              试试:

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

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

              注意:您的光标必须位于查询编辑器中,IntelliSense 菜单才可见。

              【讨论】:

              • Intellisense/SSMS 是否定期自我刷新?还是必须始终是手动过程? (我根据 2005 年的 SSMS 得出了我的猜测,但总有希望。)
              • 难以置信,在 2012 年你需要这样做。他们不能每隔几秒钟自动更新一次 Intellisense 吗?
              • 这可能需要每隔几秒访问一次数据库并拉取表/视图定义。
              • 注意:您的光标必须位于查询编辑器中,IntelliSense 菜单才可见。
              • @jinglesthula:这样可以节省 访问数据库服务器的时间!
              【解决方案8】:

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

              菜鸟的错误,但是,可以帮助别人。

              【讨论】:

              • 老实说,我不确定这是一个新手错误,因为每当您重新连接服务器时,它都会出于某种原因无缘无故切换到“master”。 :)
              • 如果是这种情况并且查询没有完全限定表名,则代码不会执行。我相信当您描述的问题不是促成因素时,OP 正在描述误报错误检测。 (当然,我去这里找的时候已经排除了这种可能。)
              • 正是我的问题。 SMS 没有任何迹象表明它已更改数据库上下文或任何其他线索。
              • @ChrisRae:那是因为master 被设置为您的用户登录的默认数据库。只需将使用sp_defaultdb 更改为另一个数据库,以便在您登录时在SSMS 中选择另一个数据库。(也可以通过Security > Logins > your user login > Properties > Default database 在SSMS 中设置)
              【解决方案9】:

              Ctrl + Shift + R 也会在 Management Studio 2008 中刷新智能感知。

              【讨论】:

              • 我没有这个功能...当我按 ctrl + shift + R 时没有任何变化
              • @IbrahimAmer 您的光标必须位于查询编辑器中,Intellisense 菜单选项才可用。如果智能感知菜单选项不可用,快捷方式将不执行任何操作。
              • 它也适用于 SQL Server Management Studio 2014 中的 T-SQL
              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

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

                【讨论】:

                • USE datbaseName GO before query 也适用于设置上下文
                • @BehroozKarjoo 是的,我试过了。它似乎并不总是有效。如果我可以复制它,我会把它放在 Microsoft Connect 或其他东西上。我敢肯定他们会把它标记为 WONTFIX 或同样令人讨厌的东西,但我会报告它。
                • 重新启动 SSMS 并右键单击新查询对我有用。
                【解决方案12】:

                已为 SSMS 2016 解决。

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

                似乎解决它的方法是打开和关闭 Intellisense,右键单击 SQL 编辑器,然后单击“Intellisense Enabled”。再次右键单击“Intellisense Enabled”以再次将其重新打开。 Ctr Q,我也是这样做的。

                这解决了问题,而且我知道在编辑菜单上获得智能感知。

                【讨论】:

                  【解决方案13】:

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

                  语法:

                  Use [YourDatabaseName]
                  Your Query Here
                  

                  【讨论】:

                    【解决方案14】:

                    解决办法是:

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

                    就是这样。

                    【讨论】:

                      【解决方案15】:

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

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

                      注意:这不会发生在不断运行的脚本中,但有时让一个带有查询的脚本比每次都键入更容易。

                      【讨论】:

                        【解决方案16】:

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

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

                        【讨论】:

                        • 我没有这个功能...当我按 ctrl + shift + R 时没有任何变化
                        • @IbrahimAmer 您的光标必须位于查询编辑器中,Intellisense 菜单选项才可用。如果智能感知菜单选项不可用,快捷方式将不执行任何操作。
                        【解决方案17】:

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

                        【讨论】:

                        • 我没有这个功能...当我按 ctrl + shift + R 时没有任何变化
                        • @IbrahimAmer 您的光标必须位于查询编辑器中,Intellisense 菜单选项才可用。如果智能感知菜单选项不可用,快捷方式将不执行任何操作。
                        【解决方案18】:

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

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

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

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

                        【讨论】:

                          【解决方案19】:

                          您尝试了吗:右键单击数据库,然后单击“刷新”

                          【讨论】:

                          • 是的,我试过了,我确定它在那里,我可以添加记录和修改等。刚刚从 dbo.Room 中选择 *,虽然我仍然有下划线,但它输出了表的内容。我会尝试重新启动。
                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2016-01-26
                          相关资源
                          最近更新 更多