存储过程失败,出现SQL错误3621,在ssms中运行正常,如果删除并重新创建

时间:2015-06-10 10:27:00

标签: sql-server

我有一个由.net应用程序调用的存储过程并传递一个xml参数 - 然后将其粉碎并形成查询的WHERE部分。

因此,在我的查询中,我查找的文档类型与XML中包含的文档类型相匹配。该表包含更多记录,其documentType为C而不是P.

无论XML是否包含用于documentType的P或C,查询都将运行数周。然后它停止为documentType C工作。

我可以从SSMS运行两个查询而没有错误(使用分析器来捕获所做的确切调用)。 Profiler显示当从应用程序运行时,documentType C查询启动一个语句,然后在语句结束之前完成,并在完成查询的未完成步骤之前完成。

我运行了另一个探查器会话以捕获所有错误和警告。我只能看到错误3621 - 该声明已被终止。 没有与此spid相关的其他错误,唯一需要注意的其他事项是警告更改数据库上下文。

我已经检查了SQL日志和扩展事件,但什么都找不到。我不认为查询与数据内容有关,因为它在SSMS中运行没有问题 - 我还检查了WHERE子句中其他字段的范围值,并且没有任何异常或不适用。我也知道,如果我放弃并重新创建程序(即完全相同的代码),问题将得到解决。

有谁知道我如何追踪导致3261失败的错误?分析不会发现这一点。

1 个答案:

答案 0 :(得分:1)

在某些情况下,SQL Server会引发两条错误消息,一条是实际错误消息,说明发生了什么,另一条是3621,显示The statement has been terminated

有时,当您从脚本调用SQL查询或对象时,第一条消息会丢失。

我建议您浏览每个SQL语句并单独运行它们。

另一个猜测是你的客户端有超时错误。如果SQL Server跟踪上有Attention event,则可以按照超时错误消息进行操作。