Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server中没有计数-为什么要使用它?_Sql Server 2008 - Fatal编程技术网

Sql server 2008 SQL Server中没有计数-为什么要使用它?

Sql server 2008 SQL Server中没有计数-为什么要使用它?,sql-server-2008,Sql Server 2008,当我在SQLServer2008中编写过程时,它总是写入SET NOCOUNT ON 我在谷歌上搜索了一下,发现它是用来抑制xx行被影响的消息的,但我为什么要这样做呢 是出于安全原因吗 编辑:好的,因此我从当前的回答中了解到,它主要用于性能,以及与客户计数的一致性 那么有没有理由不使用它呢?比如,如果我想让我的客户能够将他的计数与我的计数进行比较?我相信设置NOCOUNT ON主要用于避免向客户传回潜在的误导信息。例如,在存储过程中,您的批处理可能包含多个不同的语句,它们各自具有受影响记录的计数

当我在SQLServer2008中编写过程时,它总是写入
SET NOCOUNT ON

我在谷歌上搜索了一下,发现它是用来抑制
xx行被影响的
消息的,但我为什么要这样做呢

是出于安全原因吗

编辑:好的,因此我从当前的回答中了解到,它主要用于性能,以及与客户计数的一致性


那么有没有理由不使用它呢?比如,如果我想让我的客户能够将他的计数与我的计数进行比较?

我相信
设置NOCOUNT ON
主要用于避免向客户传回潜在的误导信息。例如,在存储过程中,您的批处理可能包含多个不同的语句,它们各自具有受影响记录的计数,但您可能只想将一个可能完全不同的数字传递回客户端。

这不是为了安全,因为行数实际上不会泄露太多信息,尤其是与相同有效载荷中的数据相比

如果从应用程序调用SQL,“xxx行”将作为数据集返回到应用程序,在获取数据之前,中间会有网络往返,正如Mihai所说,这可能会影响性能

总之,将其添加到存储过程中不会有什么坏处,这是常见的做法,但您没有义务这样做。

根据MSDN

停止显示受影响行数计数的消息 由Transact-SQL语句或存储过程返回 作为结果集的一部分

当SET NOCOUNT启用时,不会返回计数。当设置为NOCOUNT时 关闭,则返回计数。@ROWCOUNT函数更新为偶数 当“设置无计数”处于启用状态时

另一个相关的好帖子就这样

取自

SET NOCOUNT ON
关闭SQL Server发送回的消息 执行每个T-SQL语句后的客户端。这是执行的 对于所有SELECT、INSERT、UPDATE和DELETE语句。有这个 在查询窗口中运行T-SQL语句时,信息非常方便, 但在运行存储过程时,不需要这样做 要传递回客户端的信息

通过从网络中消除这种额外的开销,它可以 提高数据库和应用程序的总体性能

如果仍然需要获取受T-SQL影响的行数 正在执行的语句仍然可以使用@ROWCOUNT选项。 通过对此函数(@@ROWCOUNT)发出SET NOCOUNT命令,该命令仍然有效,并且 仍然可以在存储过程中使用,以确定有多少行 他们受到了声明的影响

那么有没有理由不使用它呢?
如果要比较受影响行的计数,请改用
@@ROWCOUNT

对于包含Transact-SQL循环的过程,将SET-NOCOUNT设置为ON可以显著提高性能,由于网络通信量大大减少
设置NOCOUNT
并不禁止您检查
@@ROWCOUNT
之类的内容。它只是防止闲聊的
n行受到影响。
消息。看见