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

时间:2010-10-19 11:25:03

标签: sql sql-server

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

我刚刚备份了公司的一个数据库,然后将其重新附加到我们的测试服务器上。这似乎工作得很好。

然后我通过程序的常规登录程序,该部分似乎也可以工作。

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

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

我发现的类似错误的解释似乎是指Schemas,但这就是事情有点奇怪的地方。原始数据库显然没有拥有任何Schema;在它的“Security”文件夹中,它只有一个“Users”文件夹,包含dbo,一个“Roles”文件夹,包含“Database Roles”文件夹,包含常用的db_owner等内容,还有一个名为“Application Roles”的空文件夹”

备份和还原数据库上的Security文件夹中充满了各种废话。除了dbo之外还有三个用户,一个“Schemas”文件夹,“Certificates”文件夹,两个加密密钥文件夹......我无法删除其中任何一个。

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

根据我自己的理解,导致这些Invalid object name错误的问题的核心是什么?而对于实际问题,我该怎么做才能纠正这种情况,实际上我正在使用我在测试数据库上工作的程序,就像在现场测试数据库一样?

2 个答案:

答案 0 :(得分:11)

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

  1. 该对象不存在,可能是因为架构和/或数据库不存在
  2. 该对象存在,但运行该过程的用户甚至无权查看它
  3. 该对象存在,但数据库区分大小写,并且名称的某些部分与代码中的名称不匹配
  4. 您需要进行更多调查以找出原因在您的情况下,但作为一个完整的猜测,您的生产服务器同时具有Informix和SomeDB数据库,但您的测试服务器只有SomeDB?

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

答案 1 :(得分:1)

对象的所有者可能存在问题(在您的情况下为SP)。 检查SQL管理工作室中的所有者