Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程失败,但在手动运行时工作正常_Sql_Sql Server_Stored Procedures_Sql Server 2008 R2 - Fatal编程技术网

Sql 存储过程失败,但在手动运行时工作正常

Sql 存储过程失败,但在手动运行时工作正常,sql,sql-server,stored-procedures,sql-server-2008-r2,Sql,Sql Server,Stored Procedures,Sql Server 2008 R2,我在SQLServer2008R2中有一个存储过程。它工作正常,但停止工作(我没有更改代码) 这很难解释,特别是因为我不能共享存储过程的代码(公司的规则)。我会尽可能多地解释 此存储过程由软件执行,此软件调用两个存储过程。其中一个存储过程工作正常,另一个存储过程“失败”(它不执行任何操作,也不返回任何错误)。这两个存储过程在某些表中执行类似的操作,例如从参数更新和插入信息。如果我检查该软件的日志,我可以看到该软件正确地调用了这两个存储过程。实际上,存储过程不返回任何错误,它只是不做任何事情 当我

我在SQLServer2008R2中有一个存储过程。它工作正常,但停止工作(我没有更改代码)

这很难解释,特别是因为我不能共享存储过程的代码(公司的规则)。我会尽可能多地解释


此存储过程由软件执行,此软件调用两个存储过程。其中一个存储过程工作正常,另一个存储过程“失败”(它不执行任何操作,也不返回任何错误)。这两个存储过程在某些表中执行类似的操作,例如从参数更新和插入信息。如果我检查该软件的日志,我可以看到该软件正确地调用了这两个存储过程。实际上,存储过程不返回任何错误,它只是不做任何事情

当我手动运行这个存储过程时,我使用了软件应该传递的相同参数,并且它工作正常

我模拟了一个真实的案例,该软件称为两个存储过程,一个有效,另一个不起任何作用。然后,我用相同的参数手动执行了第二个存储过程,它工作正常

此外,数据库的用户有足够的权限(我猜是这样,因为它工作正常)

另一件重要的事情是,我有两个具有相同数据库的环境。软件在两种环境中都调用这两个存储过程。在其中一个环境中,它可以正常工作,而在另一个环境中,软件会调用这两个存储过程,但其中一个并没有执行我在这里解释的任何操作


问候和感谢

出现这种情况的一个原因是使用临时表;如果它们不可用,则可能会失败,并且作用域在存储过程中的工作方式与在交互式会话中的工作方式不同。

首先,尝试使用探查器运行存储过程,以准确获取要发送的内容,它可能没有发送您认为应该发送的内容

接下来,检查两个数据库的结构,查看引用的表/视图,以及过程中的任何函数。请确保还检查权限。为两个数据库中的存储过程编写脚本并进行比较。当两台服务器上的数据库出现这样的问题时,服务器通常与它们应该具有的确切代码不同步


此外,数据可能会不同,从而导致一台服务器中的存储过程不需要对任何数据执行操作。

如果没有显示,则没有回答。您好,Jefry,欢迎来到Stack Overflow。通常,除非你的问题足够具体,否则你不会得到答案。您可以创建一个简短的存储过程来重现问题,并向我们展示如何调用它,我们可以提供帮助。否则,您必须启动SQL跟踪,并在应用程序调用过程时运行它-您将能够看到它是否按预期被调用。运行时工作,软件调用时不工作…通常指向未正确传递到存储过程的变量(错误的数据类型?…尾随或前导空格?)。如果没有代码,这是绝对的猜测工作,尽管“如果我检查软件的日志,我可以看到该软件正确地调用了这两个存储过程。事实上,存储过程不返回任何错误,它只是不做任何事情。”这可能是假定软件正确地捕获和记录了错误。永远不要假设。您可以尝试服务器端跟踪或探查器,以更深入地了解实际发生的情况。@Fenton我按照您的建议使用探查器-SQL跟踪来运行它,我们发现了问题。它忽略了print()之后的代码。我们只是注释print(),它又开始工作了。非常感谢。谢谢大家的评论。您好,正如您所说,我使用探查器运行了存储过程,我发现我的团队在print()之后忽略了代码。我们只是注释print(),它又开始工作了。我们猜测这是因为印刷品太大,大约6000个字符,但它也很混乱,因为它与印刷品一起工作。谢谢你的帮助。我没有临时表,但很有趣,我会记住的。我将来可能会有用的,谢谢你的帮助。