0

MSDN 状态

SET NOCOUNT ON 防止为存储过程中的每个语句向客户端发送 DONE_IN_PROC 消息。对于包含多个不返回太多实际数据的语句的存储过程,或者对于包含 Transact-SQL 循环的过程,将 SET NOCOUNT 设置为 ON 可以显着提高性能,因为网络流量大大减少。

减少网络流量是使用 NOCOUNT ON 的唯一原因,还是有其他作用?

4

3 回答 3

3

您不会从 proc 中获得受影响的行数。

我认为这个问题和答案,以及其中包含的链接,尤其是 Remus 关于性能的链接,会有所帮助。

它在某些情况下对一些开发人员有帮助,尤其是在调试时对 DBA 有帮助。

于 2018-08-27T21:29:14.453 回答
0

在较旧的 API(ADO,在 ADO.Net 之前)中,它会对从 proc 返回的内容感到困惑。它会认为这X row(s) affected是您正在寻找的结果集。它会返回它而不是你选择的任何东西。

不过,这似乎不再是问题了。

于 2018-08-27T23:14:53.437 回答
0

有很多地方你不希望存储过程的任何输出。例如,使用临时表和最终选择的存储过程将显示每个部分受影响的行数,如果它依赖于存储过程的返回,这可能会混淆调用存储过程的任何内容。正如其他答案所说,这可能是一些调用库的问题。

也绝对是你有一个循环的问题,因为你最终可能会为某些(写得不好的)程序产生数千个计数。

因此,在回答时,您可能会发现您需要打开 NOCOUNT,或者您可能需要为大部分例程设置 NOCOUNT ON,但在最终查询之前将其关闭,或者您可以不理会它。

大多数时候这不是问题,但如果事情不正常,请注意它可能是问题的根源。

于 2018-08-28T00:09:27.073 回答