我正在一个相当大的项目上做一些维护编程,这个项目是由现在离开公司的人开始的...
我刚刚备份了公司的一个数据库,然后将其重新附加到我们的测试服务器上.这似乎工作得很好.
然后我通过该程序的常规登录程序,该部分似乎也可以工作.
但是,一旦我在程序中找到需要执行存储过程的点,我就会收到一个错误告诉我Invalid object name 'Informix.dbo.customer'
.
在原始数据库上运行相同的函数工作正常,并返回我期望看到的数据.
我发现的类似错误的解释似乎是指Schemas,但事情变得有些奇怪.原始数据库显然没有任何Schema; 在它的"Security"文件夹中,它只有一个包含dbo的"Users"文件夹和一个"Roles"文件夹,其中包含"Database Roles"文件夹,包含常用的db_owner等内容,以及一个名为"Application Roles"的空文件夹".
备份和还原的数据库上的Security文件夹中包含各种垃圾.三个用户除了dbo,一个"Schemas"文件夹,"Certificates"文件夹,两个加密密钥文件夹......我无法删除任何这些.
由于我对SQL登录系统的理解有限,我登录的用户从此随机垃圾集合中获取非dbo权限,因此被拒绝访问dbo拥有的数据库部分.
根据我自己的理解,问题的核心在于抛出这些Invalid object name
错误是什么?而对于实际问题,我该怎么做才能纠正这种情况,并且实际上让我正在使用的程序在测试数据库上的工作方式与在实际数据库中的工作方式相同?
Pon*_*ife 12
如果我理解正确,你在数据库(SomeDB)中执行一个过程(SomeProc)并且它给出了错误Invalid object name 'Informix.dbo.customer'
?这只是意味着SomeProc在名为"Informix"的数据库中名为"dbo"的模式中找不到名为"customer"的对象.这有几个可能的原因:
您需要进行更多调查以找出原因是什么,但作为一个完整的猜测,您的生产服务器同时具有Informix和SomeDB数据库,但您的测试服务器只有SomeDB?
最后,在发布问题时,请始终包含您的SQL Server版本(2000/2005/2008)和版本(Express,Standard,Enterprise); 在谈论模式和权限时,它们可能非常重要,因为功能和行为可能不同.