我在SQL Server 2008 R2中有一个存储过程。它工作正常,但它停止工作(我没有更改代码)。
这很难解释,特别是因为我无法共享存储过程的代码(公司规则)。我将尝试尽可能地解释它。
该存储过程由软件执行,该软件调用两个存储过程。其中一个存储过程正常工作,另一个存储过程“失败”(它不执行任何操作而不返回任何错误)。两个存储过程在某些表中执行类似的操作,例如更新和插入信息,来自参数。如果我检查软件的日志,我可以看到该软件正在正确调用两个存储过程。实际上,存储过程不会返回任何错误,它只是没有做任何事情。
当我手动运行此存储过程时,我使用与软件应该通过的相同参数并且它可以正常工作。
我模拟了一个真实案例,软件调用了两个存储过程,一个工作,另一个没有做任何事情。然后,我使用相同的参数手动执行第二个存储过程,它正常工作。
此外,数据库的用户有足够的权限(我猜它,因为它正常工作)。
另一个重要的事情是我有两个具有相同数据库的环境。该软件在两个环境中调用两个存储过程。在其中一个环境中它正常工作,另一个环境是软件调用两个存储过程,但其中一个没有做任何事情,正如我在这里解释的那样。
问候并感谢!
答案 0 :(得分:2)
首先,尝试使用Profiler运行存储过程以准确获取正在发送的内容,它可能不会发送您认为应该发送的内容。
接下来检查引用的表/视图的两个数据库的结构,procs中的任何函数。确保还要检查权限。在两个数据库中编写存储过程的脚本并进行比较。当两台服务器上的数据库出现类似问题时,通常服务器与它们应具有的确切代码不同步。
此外,数据可能不同,导致一台服务器中的存储过程无需执行任何数据。
答案 1 :(得分:1)
这种情况可能发生的一个原因是临时表的使用;如果它们不可用,则可能会失败,并且范围在存储过程中的工作方式与在交互式会话中的工作方式不同。