代码之家  ›  专栏  ›  技术社区  ›  Frosty840

“无效对象名:dbo.etc”错误的根本原因是什么?

  •  18
  • Frosty840  · 技术社区  · 15 年前

    我正在一个相当大的项目上做一些维护编程,这个项目是由现在离开公司的人开始的…

    我刚刚备份了公司的一个数据库,然后将其重新连接到我们的测试服务器。这似乎很管用。

    然后我将完成程序的常规登录过程,这一部分似乎也可以工作。

    但是,一旦我到达程序中需要执行存储过程的点,我就会得到一个错误消息,告诉我 Invalid object name 'Informix.dbo.customer' .

    在原始数据库上运行相同的函数可以正常工作,并返回我希望看到的数据。

    对于我发现的类似错误的解释似乎是指模式,但这就是事情变得有点奇怪的地方。原始数据库显然没有 有 任何模式;在它的“安全”文件夹中,它只有一个“用户”文件夹,其中包含dbo和一个“角色”文件夹,其中包含“数据库角色”文件夹,以及常见的db_所有者等内容,以及一个名为“应用程序角色”的空文件夹。

    备份和还原数据库上的安全文件夹中满是各种垃圾。三个用户除了dbo,一个“schemas”文件夹,“certificates”文件夹,两个加密密钥文件夹…我不能删除这些。

    从我对SQL登录系统的有限理解来看,我作为登录用户从这个随机垃圾集合中获取非dbo权限,因此被拒绝访问dbo拥有的数据库部分。

    据我所知,引发这些问题的核心是什么? Invalid object name 错误?对于实际问题,我能做些什么来纠正这种情况,并让我使用的程序在测试数据库上的工作与在活动数据库上的工作一样?

    2 回复  |  直到 11 年前
        1
  •  11
  •   razorsyntax Pondlife    11 年前

    如果我理解正确,您正在数据库(somedb)中执行一个过程(someproc),它给出了错误 Invalid object name 'Informix.dbo.customer' ?这仅仅意味着someproc无法在名为“informix”的数据库中名为“dbo”的模式中找到名为“customer”的对象。这有几个可能的原因:

    1. 对象不存在,可能是因为架构和/或数据库不存在
    2. 对象存在,但运行该过程的用户甚至没有权限查看它
    3. 对象存在,但数据库区分大小写,并且名称的某些部分与代码中的名称不匹配

    您需要进行更多的调查,以找出在您的案例中是什么原因,但是作为一个完整的猜测,您的生产服务器同时拥有Informix和SomeDB数据库,但是您的测试服务器只有SomeDB?

    最后,在发布问题时,请始终包括您的SQL Server版本(2000/2005/2008)和版本(Express、Standard、Enterprise);在讨论架构和权限时,它们可能非常重要,因为功能和行为可能不同。

        2
  •  1
  •   Mark PM    15 年前

    这可能是对象所有者(在您的情况下是SP)的问题。 在SQL Management Studio中检查所有者