当它明显存在时找不到SP

时间:2013-06-10 20:24:47

标签: asp.net sql-server

我将数据库从实时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)。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

SqlCommand cmd  = new SqlCommand("username.StoredProcedurenName", mySqlConnection);

答案 1 :(得分:1)

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

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

这是你的两个选择。