存储过程不存在,或者存在?

时间:2011-06-25 23:10:01

标签: c# sql-server

我遇到了问题:

我有一个数据库连接,我在其上运行存储过程。这个连接用于在之前创建所述存储过程。

当我尝试调用给定的存储过程时,稍后会收到以下消息:

  

无法找到存储过程   'dbo.yaf_prov_upgrade'。

问题是它确实存在于数据库中。而且它也出现在SQL Server Profiler上。

  

RPC:已完成的exec   [DBO]。[yaf_prov_upgrade]   @ PreviousVersion = 46,@ NewVersion = 46 .Net   SqlClient数据   提供者Nico Matrix \ Nico

我想知道特定查询会抛出这样的异常的原因是什么,即使它存在,它被调用,并且调用到达数据库。

连接不会有问题,因为它已经执行了其他存储过程。它不是程序的问题,因为它确实存在,实际上是相同的应用程序,完全相同的网页,创建它并把它放在那里。

更新:忘了提到我使用了集成安全性,我确实在应用程序连接的同一个用户的数据库上运行SP,运行它没有问题。

那么可以是什么?

3 个答案:

答案 0 :(得分:13)

您的RPC仅完成意味着提交给SQL Server的批处理正确并已完成。这并不意味着存储过程运行并执行正常。

(不要争辩,检查)其中一个:

  • 错误的权限
  • 错误的数据库上下文
  • 错误的服务器
  • 存储过程在不同的数据库中

确保事情是相同的

SELECT
   @@SERVERNAME, 
   SUSER_SNAME(), 
   DB_NAME(), 
   USER_NAME(), 
   OBJECT_ID('dbo.yaf_prov_upgrade')

如果存储的proc在该数据库不存在,或者您没有权限,则OBJECT_ID将为NULL。

答案 1 :(得分:1)

我怀疑这可能是一个权限问题,请检查您的程序正在执行的用户名是否具有对存储过程的执行权限。

答案 2 :(得分:0)

到目前为止我在ms-sql上都不是专家,但我确实知道它将SP保存在全局缓存中。是否可能本地连接仅在连接时获取SP的全局列表?也许重新启动连接或重新选择缓存?