找不到存储过程错误

时间:2009-08-13 21:33:13

标签: sql-server sql-server-2005 stored-procedures

我最近从sql server 2000数据库导入了数据库到sql server 2005数据库。我已经完成并设置了我之前在旧数据库中设置的相同登录凭据和所有者权限。

我正在使用的所有代码库都存储过程只是按存储过程名称列出。

为了确保我已经创建了正确的登录,我使用我的应用程序正在使用的连接信息(即使用用户名“licensemgr”及其相关密码)登录到SQL Server Management工作室。当我使用组合登录时,我可以在我的数据库中看到所有表,存储过程等。当我尝试运行存储过程时,Sql Server Management Studio使用以下语法来执行它:

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

并且执行没有错误。

如果我尝试删除[licensemgr]。从[Stored_Procedure_Name]之前,我得到错误“无法找到存储过程:Stored_Procedure_Name”。这与我在此数据库上运行应用程序时遇到的错误相同。我在我的应用程序中更改了一个存储过程调用以获得“licensemgr”。但是,在存储过程名称前面似乎可以解决问题,我不希望在我的应用程序中为每个存储过程调用执行此操作。因此,我想知道我的SQL Server实例中可能缺少哪种类型的安装/权限类型问题,因此即使我以licensemgr身份登录数据库,我也看不到架构“licensemgr”中的存​​储过程。

2 个答案:

答案 0 :(得分:1)

创建用户时,是否指定了DEFAULT_SCHEMA?

CREATE USER ... WITH DEFAULT_SCHEMA = "licensemgr"

如果没有,您可能需要使用ALTER USER在新系统中为您的用户解决此问题。

答案 1 :(得分:1)

在SQL server 2000中,[licensemgr]引用了表的所有者。因此,当您以[licensemgr]身份登录时,您不需要前缀。

在SQL Server 2005中,这已更改为架构,因此必须指定它。参见:

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

编辑

您需要注意两件事:

  • 如果用户是sysadmin角色,他将始终默认为dbo架构,因此您需要前缀
  • 如果您的用户需要运行不同模式的代码,则需要使用前缀

如果通过设置用户的默认架构

,上述两者都不起作用