“找不到存储过程”

时间:2009-05-11 12:30:16

标签: sql-server stored-procedures

我正在维护一个拥有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上运行)时。

10 个答案:

答案 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文件,然后按播放按钮。