【问题标题】:Cannot Find Stored Procedure Error找不到存储过程错误
【发布时间】:2023-04-09 04:51:02
【问题描述】:

我最近将数据库从 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”中的存​​储过程。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    编辑

    有两点需要注意:

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

    如果以上两个都不是,则应该通过为用户设置默认架构来工作

    【讨论】:

    • 所以为了澄清,你是说(如果我没看错的话,这篇文章是说)在 SQL Server 2005 中,你必须为每个存储过程指定架构名称,因为架构名称的所有权?如果需要,我不介意修改我的所有代码,我只是想确保我正确理解你。
    【解决方案2】:

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

    CREATE USER ... WITH DEFAULT_SCHEMA = "licensemgr"
    

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

    【讨论】:

    • 我使用 SQL Server Management Studio 创建用户并将默认架构设置为 licensemgr。所以我觉得我在这里很好。
    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2023-03-30
    相关资源
    最近更新 更多