3

我们引入了一个新的数据访问框架来调用 SQL 存储过程。在调用返回记录集的存储过程时,我们遇到了该存储过程还执行某种更新(插入/更新/删除)的问题:

无法更改以 Command 对象为源的 Recordset 对象的 ActiveConnection 属性。

解决方案是将“SET NOCOUNT ON”添加到存储过程的顶部。这工作得很好,当然,它也有一个吹捧的性能增强。

我们建议开发人员在编写代码来调用现有存储过程时,还必须重构存储过程本身以包含SET NOCOUNT ON.

但是,这让我想知道,对所有存储过程执行全面更新以包含SET NOCOUNT ON. 在什么情况下这会破坏 SP 的功能?(假设 @@ROWCOUNT 函数即使在 SET NOCOUNT 为 ON 时也会更新)

一如既往的帮助,非常感谢。

4

1 回答 1

5

我认为主要的危险是,如果您现有的任何进程都在寻找和/或假设将返回行数而不显式查询@@ROWCOUNT.

您的代码中的某处可能是一个执行的存储过程,并且应用程序等待返回行值知道它已完成,在这种情况下应用程序将无限期挂起。

于 2011-03-01T14:33:35.440 回答