2009-08-13 95 views
1

我最近做了一個從sql server 2000數據庫到sql server 2005數據庫的數據庫導入。我已經完成並設置了我以前在舊數據庫中設置的相同登錄憑證和所有者權限。找不到存儲過程錯誤

我正在使用的所有代碼庫都存儲了僅通過存儲過程名稱列出的過程。

爲了確保創建了正確的登錄名,我使用我的應用程序正在使用的連接信息(即使用用戶名「licensemgr」及其相關密碼)登錄到SQL Server Management Studio。當我使用組合登錄時,我可以看到數據庫中的所有表格,存儲過程等。當我嘗試運行存儲過程時,Sql Server Management Studio使用以下語法來執行它:

EXEC: @return_value = [licensemgr].[Stored_Procedure_Name] 

並且它執行時沒有錯誤。

如果我嘗試刪除[licensemgr]。從[Stored_Procedure_Name]之前,但是我收到錯誤「無法找到存儲過程:Stored_Procedure_Name」。這與我的應用程序從這個數據庫運行時得到的錯誤是一樣的。我在我的應用程序中更改了一個存儲過程調用以獲得「licensemgr」。在存儲過程名稱前面,似乎可以解決問題,但是,我不想爲我的應用程序中的每個存儲過程調用執行此操作。因此,我想知道我的SQL Server實例中可能缺少什麼類型的安裝程序/權限類型問題,以至於即使當我以licensemgr身份登錄到數據庫時,我也看不到架構「licensemgr」中的存​​儲過程。

回答

1

在SQL Server 2000中,[licensemgr]引用表的所有者。所以當你以[licensemgr]身份登錄時,你不需要前綴。

在SQL Server 2005中,這已更改爲模式,因此必須指定它。請參閱:

http://msdn.microsoft.com/en-us/library/ms190387.aspx

編輯

還有,你需要注意兩件事情:

  • 如果用戶是sysadmin角色中,他將始終默認爲DBO模式,因此您需要前綴
  • 如果您的用戶需要運行不同架構中的代碼,則需要前綴

如果上述兩者中沒有一個應該通過爲用戶設置默認架構來工作

+0

所以只是爲了澄清,你說(如果我正確地讀了文章,文章是這樣說的),在SQL Server 2005中,你必須爲每個存儲過程指定模式名稱,因爲所有權與模式名稱是分離的? 我不介意修改我的所有代碼,如果這是事情需要的方式,我只是想確保我正確地理解你。 – Kivus 2009-08-13 21:58:37

1

創建用戶時,是否指定了DEFAULT_SCHEMA?

CREATE USER ... WITH DEFAULT_SCHEMA = "licensemgr" 

如果沒有,你可能需要使用ALTER USER解決這一問題在新的系統用戶。

+0

我使用SQL Server Management Studio創建用戶,並將默認架構設置爲licensemgr。所以我覺得我很好。 – Kivus 2009-08-13 21:56:39