0

我将数据库从实时 MSSQL 服务器复制到本地服务器,并且能够正确登录。然而,我遇到了一个问题,当需要调用存储过程时,Asp.Net 应用程序不断告诉我 SP 不存在,而它显然存在。

我正在使用 Windows 身份验证,但在我使用凭据的服务器上,这可能是问题吗?

此外,所有 SP 的名字后面都附有我的在线用户名,如username.StoredProcedurenName.

请帮助我已经尝试解决这个问题几个小时。

我刚刚注意到,当我尝试从 SQL Management Studio 运行 SP 时,它可以工作,但它会将用户名附加到 SP,例如:

USE [DBNAME]
GO

DECLARE @return_value int

EXEC    @return_value = [username].[SPNAME]

SELECT  'Return Value' = @return_value

GO

如果我删除用户名,它会说同样的话(找不到 SP)。我该如何解决这个问题?

4

2 回答 2

1

我怀疑您在没有指定架构的情况下调用存储过程。当调用不在您的帐户配置的默认架构(通常是 dbo)中的存储过程(或访问表、视图等)时,您需要像下面的 sql 命令一样显式包含架构

SqlCommand cmd  = new SqlCommand("username.StoredProcedurenName", mySqlConnection);
于 2013-06-10T23:17:16.597 回答
1

这可能是杰森所说的。解决方案与权利和所有权有关。当您在 SQL Management Studio 中看到 SP 时,在 Programmability->Stored Procedures 下,您的 SP 应该有一个类似“dbo”的前缀。或“守门人”。

如果 SP 有“dbo”。作为前缀,您连接到数据库的用户帐户只是数据库所有者 (dbo) 组的一部分,否则您将无权访问它。因此,您可以将用户添加到该组,或者使用该帐户创建存储过程(“create procedure spBlahBlah as ..”)以计划在其下运行程序;当您调用它时,您使用“exec GateKeeper.spBlahBlah”来规定 Schema.StoredProcedureName。

这是你的两个选择。

于 2013-06-11T11:54:41.790 回答