dan*_*die 37 sql t-sql sql-server nocount
我有很多程序set nocount on.
是否有必要在存储过程结束时将其关闭?
例如:
create procedure DummyProc
as
begin
set nocount on
...
set nocount off
end
Run Code Online (Sandbox Code Playgroud)
Jer*_*ose 38
set nocount on将禁用X rows affected.SQL返回的消息.在某些情况下,由于客户端执行存储过程的不良影响,此消息被抑制.
set nocount off将撤消此抑制.但是,set nocount on是一个范围设置,默认情况下,无论如何都会在离开范围时关闭.
现在,有set nocount off必要吗?不,因为执行的任何新命令都将在不同的范围内,并且默认情况下set nocount off始终有效.但正如上面的评论中所述,它被认为是一种很好的做法,只是为了明确指出当proc完成执行时此设置将恢复正常.
小智 6
我知道这是一篇比较老的文章,但是当我寻找答案时,这是Google上的第一篇文章。以上测试它的响应是一个非常好的主意。
我对此进行了测试,并希望通过一些其他详细信息来更新上述内容。
使用SET NOCOUNT ON创建的作用域将流到过程调用的任何proc。因此,如果您的过程没有将SET NOCOUNT设置为ON,然后调用了一个sproc,则该sproc将获得您的SET NOCOUNT设置。当您退出存储过程时,设置确实消失了,但是该设置会向下流到称为存储过程中。如果在CALLED存储过程中设置了SET NOCOUNT,则外部存储过程将具有它设置的SET NOCOUNT,而内部存储过程不会影响外部存储过程。
因此,我认为您真的不需要在存储过程结束时重置它,因为您的设置将永远不会从存储过程中溢出。但是,如果您的存储过程取决于该设置,则应在需要它之前对其进行设置,因为如果从另一个存储过程调用该存储过程,则它的设置可能会与您假定的设置不同。