全面更新存储过程以包括SET NOCOUNT ON的后果是什么

Jam*_*man 3 sql t-sql sql-server nocount

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

无法更改具有Command对象作为其源的Recordset对象的ActiveConnection属性.

解决方法是在存储过程的顶部添加"SET NOCOUNT ON".这很好用,当然,它也有一个吹捧性能增强.

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

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

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

JNK*_*JNK 5

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

您的代码中的某个位置可能是执行的存储过程,并且应用程序等待返回行值以确定它已完成,在这种情况下,应用程序将无限期挂起.