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

我遇到了问题:

我有一个数据库连接,我在其上运行存储过程。 此相同的连接用于更早地创建所述存储过程。

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

找不到存储过程’dbo.yaf_prov_upgrade’。

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

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

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

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

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

那又怎样呢?

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

它将是(不要争论,检查)其中一个:

  • 错误的权限
  • 错误的数据库环境
  • 错误的服务器
  • 存储过程位于不同的数据库中

确保事情是一样的

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

如果存储过程在该数据库中不存在或您没有权限则OBJECT_ID将为NULL。

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

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