我遇到了问题:
我有一个数据库连接,我在其上运行存储过程。这个连接用于在之前创建所述存储过程。
当我尝试调用给定的存储过程时,稍后会收到以下消息:
无法找到存储过程 'dbo.yaf_prov_upgrade'。
问题是它确实存在于数据库中。而且它也出现在SQL Server Profiler上。
RPC:已完成的exec [DBO]。[yaf_prov_upgrade] @ PreviousVersion = 46,@ NewVersion = 46 .Net SqlClient数据 提供者Nico Matrix \ Nico
我想知道特定查询会抛出这样的异常的原因是什么,即使它存在,它被调用,并且调用到达数据库。
连接不会有问题,因为它已经执行了其他存储过程。它不是程序的问题,因为它确实存在,实际上是相同的应用程序,完全相同的网页,创建它并把它放在那里。
更新:忘了提到我使用了集成安全性,我确实在应用程序连接的同一个用户的数据库上运行SP,运行它没有问题。
那么可以是什么?
答案 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的全局列表?也许重新启动连接或重新选择缓存?