我有很多程序set nocount on
。
是否有必要在存储过程结束时将其关闭?
例如:
create procedure DummyProc
as
begin
set nocount on
...
set nocount off
end
我有很多程序set nocount on
。
是否有必要在存储过程结束时将其关闭?
例如:
create procedure DummyProc
as
begin
set nocount on
...
set nocount off
end
set nocount on
将禁用X rows affected.
SQL 返回的消息。在某些情况下,由于客户端执行存储过程的不良影响,此消息被抑制。
set nocount off
将撤消此抑制。但是,set nocount on
这是一个范围设置,默认情况下,无论如何在离开范围时都会关闭。
现在,有set nocount off
必要吗?不,因为执行的任何新命令都将在不同的范围内,并且默认情况下set nocount off
始终有效。但正如上面评论中所述,这被认为是一种很好的做法,只是为了明确表明当 proc 完成执行时此设置将恢复正常。
我知道这是一篇相当老的帖子,但当我寻找答案时,它是谷歌上的第一个热门话题。上面测试它的响应是一个非常好的主意。
我对此进行了测试,并想用一些额外的细节来更新上面的内容。
您使用 SET NOCOUNT ON 创建的范围流向您的过程调用的任何 proc。因此,如果您的过程执行了 SET NOCOUNT ON 然后您调用了一个 sproc,该 sproc 将获得您的 SET NOCOUNT 设置。当您退出存储过程时,设置会消失,但设置会向下流入调用的存储过程。如果你在 CALLED sproc 内设置 NOCOUNT,外部 sproc 将具有它设置的 SET NOCOUNT,而内部 sproc 不会影响外部 sproc。
所以我认为你真的不需要在你的sproc结束时重置它,因为你的设置永远不会向上流出你的sproc;但是,如果您的 sproc 依赖于设置,它应该在需要它之前设置它,因为如果它被另一个 sproc 调用,它可能具有与您假设不同的设置。
只有当你不想看到
(1 row(s) affected) // or n rows....
大多数时候——当你调试时
并且您使用打印命令-因此您想查看自己的纯文本……这是一个好习惯。
它不会影响您的查询结果(打开或关闭 - 没关系。) - 如果这就是您的要求。(感谢 JNK)。
这很简单。如果另一个程序正在运行您的程序,则不需要它。假设我的 python 代码正在调用 mssql 过程,那么我的应用程序不需要受影响的行数,所以我“应该”肯定在我的代码中放置“set nocount on”