存储过程中需要“SET NOCOUNT OFF”吗?

我有许多程序,已经set nocount on

是否有必要在存储过程结束时closures它?

例如:

 create procedure DummyProc as begin set nocount on ... set nocount off end 

set nocount on将禁用X rows affected.X rows affected. 消息SQL返回。 在某些情况下,由于客户端执行存储过程的不良影响,此消息被抑制。

set nocount off将取消这种抑制。 但是, set nocount on设置为范围设置,默认情况下,在离开范围时将被closures。

现在, set nocount off必要? 不,任何执行的新命令都会在不同的范围内,并且默认情况下, set nocount off始终有效。 但是正如上面在注释中所说的那样,这被认为是一个很好的习惯,只是明确指出当proc完成执行时这个设置将会恢复正常。

只有当你不想看到

 (1 row(s) affected) // or n rows.... 

大部分时间 – 当你debugging

并使用打印命令 – 所以你想看到自己的纯文本…所以这是一个很好的做法。

编辑

它不影响你的查询结果(开或关 – 没关系) – 如果这是你的要求。 (感谢JNK)。

我知道这是一个相当古老的post,但是当我寻找答案时,这是Google上的第一次。 上面的反应来testing它是一个非常好的主意。

我testing了这个,想要更新上面的一些额外的细节。

您使用SET NOCOUNT ON创build的范围将stream​​向您的过程所调用的任何过程。 所以如果你的程序没有设置NOCOUNT ON,然后你调用一个存储过程,那个存储过程就会得到你的SET NOCOUNT设置。 当你退出你的短片时,这个设置会消失,但是这个设置会stream入被称为sprocs的位置。 如果你在CALLED sproc的内部设置了NOCOUNT,那么外部的sproc会有SET NOCOUNT,并且内部的sproc不会影响外部的sproc。

所以我认为你不需要在你的sproc结尾重置它,因为你的设置永远不会从你的sproc向上stream动。 但是,如果你的sproc取决于设置,它应该在需要之前设置它,因为如果它从另一个sproc调用,它可能会有一个不同的设置,比你想象的。

Interesting Posts