MSSQL存储过程:NOCOUNT ON是否影响SELECT COUNT(*)聚合查询结果?
关于MSSQL存储过程中
SET NOCOUNT ON对聚合查询的影响 嘿,这个问题问得相当到位!我来给你掰扯清楚:
SET NOCOUNT ON绝对不会对SELECT COUNT(*)这类聚合查询的结果产生任何负面影响——它唯一的作用就是让SQL Server不再向客户端返回那种“(1 rows affected)”之类的行计数提示消息。
具体来说,当你开启NOCOUNT ON后,SQL Server会停止发送DONE_IN_PROC类型的状态消息,这类消息原本是用来告知客户端“有多少行被当前语句影响/处理”的。但对于SELECT COUNT(*)这种返回聚合结果的查询,它的数值是作为正式的结果集返回的,和那些状态消息完全是两个独立的东西。
举个实际的例子,你在存储过程里写:
SET NOCOUNT ON; SELECT COUNT(*) AS TotalRecords FROM YourTargetTable;
执行这个存储过程后,客户端依然能准确拿到TotalRecords的数值,只是不会再看到额外的“(1 rows affected)”提示了。
顺带提一句,开启NOCOUNT ON其实是个好习惯:它能减少不必要的网络传输(毕竟少发了那些状态消息),还能避免有些客户端程序把这些额外消息当成结果集来处理,进而引发逻辑错误。
总结一下:放心用SET NOCOUNT ON,它不会搞砸你的聚合查询结果,只是帮你清理掉无关的提示信息而已。
内容的提问来源于stack exchange,提问作者BossyFingers
相关产品推荐
相关产品推荐

