我正在维护一个拥有SQL Server 2005后端的经典ASP网站。对于一小段新功能,我编写了一个存储过程来进行插入。这是数据库中唯一的用户存储过程。
当我尝试从代码中调用存储过程时,出现以下错误:
Microsoft OLE DB Provider for SQL Server error '80040e14' Could not find stored procedure 'InsertGroup'. /newGroup.asp, line 84
数据库使用SQL Server身份验证。当我使用与连接字符串中相同的用户/ pw连接到Visual Studio中的数据库服务器时,存储过程不可见,但所有表都是。
用户具有datareader和datawriter角色以及对存储过程的显式执行权限。
我错过了什么?
更新:道歉,服务器管理员误以为它是2000服务器,当它实际上是2005服务器(在Windows Server 2003 x64上运行)时。
答案 0 :(得分:51)
羞耻地走了:
连接字符串指向实时数据库。错误消息完全准确 - 存储过程仅存在于dev DB中。感谢所有提供优秀答案的人,以及为浪费你的时间而道歉。
答案 1 :(得分:8)
您可能需要检查存储过程的实际所有者是谁。如果它是特定的不同用户,则可能是您无法访问它的原因。
答案 2 :(得分:3)
有时,当您使用参数调用存储过程时,也会发生这种情况。例如,如果您输入类似的内容:
set @runProc = 'dbo.StoredProcedure'
exec @runProc
这样可行,但是:
set @runProc = 'dbo.StoredProcedure ''foods'''
exec @runProc
这将抛出错误“无法找到存储过程dbo.StoredProcedure'食物'”,但是这可以通过 parantheses 轻松克服:
set @runProc = 'exec dbo.StoredProcedure ''foods'''
exec (@runProc)
答案 3 :(得分:2)
确保您的架构名称在连接字符串中?
答案 4 :(得分:2)
有两个原因:
1-商店程序名称 在代码中声明存储过程时,请确保不执行或执行关键字 例如:
C#
string sqlstr="sp_getAllcustomers";// right way to declare it.
string sqlstr="execute sp_getAllCustomers";//wrong way and you will get that error message.
从这段代码:
MSDBHelp.ExecuteNonQuery(sqlconexec, CommandType.StoredProcedure, sqlexec);
CommandType.StoreProcedure
将仅查找商店过程名称,ExecuteNonQuery
将执行场景后面的商店过程。
2-连接字符串:
另一个原因是错误的连接字符串。查看连接字符串内部并确保您具有连接,尤其是数据库名称等等。
答案 5 :(得分:1)
我有:
USE [ wrong_place ]
GO
前
DECLARE ..
答案 6 :(得分:0)
无法找到存储过程?----表示你得到这个...我们的代码就像这样
String sp="{call GetUnitReferenceMap}";
stmt=conn.prepareCall(sp);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
currencyMap.put(rs.getString(1).trim(), rs.getString(2).trim());
我有4个数据库(sample1,sample2,sample3)但是stmt
搜索位置是master
默认数据库然后我们将获得异常。
我们应该提供数据库名称然后解决问题::
String sp="{call sample1..GetUnitReferenceMap}";
答案 7 :(得分:0)
还有一种可能性。在这里列出因为它刚好发生在我身上并且没有被提及; - )
我不小心在名字的末尾添加了一个空格字符。 在我终于注意到它之前花了很多时间尝试。在弄明白之后,它总是很简单。
答案 8 :(得分:0)
我有同样的问题。最终我找到了原因。我使用了来自Web的代码来测试过程的输出。最后,它接到了Drop(procedure)
的电话,所以我自己删除了它。
答案 9 :(得分:0)
如果错误消息仅在本地发生,请尝试打开sql文件,然后按播放按钮。