2010-10-19 140 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管理工作室

相關問題