我将数据库从实时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)。我该如何解决这个问题?
答案 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。
这是你的两个选择。