2010-10-19 139 views
17

我正在做一个相当大的项目,这是由人谁是现在离开公司,开始有些维修编程...“无效的对象名称:dbo.etc”错误的根本原因?

我刚才备份的公司数据库之一,然后将其重新连接到我们的测试服务器。这很多似乎工作正常。

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

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

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

对类似错误的解释我发现似乎指的是Schema,但这就是事情变得有点奇怪的地方。原始数据库没有明显任何Schema;在它的“安全”文件夹中,它只有一个包含dbo的“用户”文件夹和一个包含“数据库角色”文件夹的“角色”文件夹,以及通常的db_owner等等东西,以及一个名为“应用程序角色”。

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

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

为了我自己的理解,抛出这些Invalid object name错误的问题的核心是什么?而对于实际问题,我能做些什么来纠正这种情况,实际上我正在使用的测试数据库工作方式与其在活动测试数据库中的工作方式相同?

+1

恢复的数据库是否与生产数据库具有相同的名称?数据库名称是否可能硬编码到应用程序中? – 2010-10-19 12:11:34

+0

对不起,意思是说明这一点然后忘记了。我已经使用执行存储过程函数从SQL Server Management Studio中测试了存储过程,存储过程在原始数据库上运行,而不是在新数据库上运行。数据库名称是相同的,但。 – Frosty840 2010-10-19 12:15:23

回答

9

如果我理解正确,您正在执行数据库(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);在讨论模式和权限时,它们可能非常重要,因为功能和行为可能会有所不同。

+0

那么,我的理解并不是那么糟糕,但我更愿意为我更好地了解我遇到问题所在的位置。问题原来是因为我认为Informix是一种数据库连接方法,而不是一个特定的数据库,所以对我得到的信息有一些奇怪的误解。现在一切都好,谢谢。 – Frosty840 2010-10-19 14:41:27

1

这可能是对象的所有者(您的案例中的SP)的问题。 检查所有者在SQL管理工作室

相关问题