如果要在根存储过程中调用其他存储过程,仅在根存储过程中使用SET NOCOUNT ON是否正确?

时间:2019-06-28 11:45:31

标签: sql-server tsql stored-procedures

任何人都可以在有关T-SQL的以下情况下提供帮助: 如果您有一个名为SP_A的存储过程,该存储过程在内部调用了SP_B的存储过程,那么您将以下指令作为SP_A的第一行:SET NOCOUNT ON。我知道NOCOUNT变量具有批处理作用域,因此值得一提的是,在任一存储过程的主体中任何地方都没有GO命令。 子存储过程(SP_B)中的NOCOUNT会生效吗?

SP_A代码示例:

CREATE PROCEDURE dbo.SP_A
AS
BEGIN
    SET NOCOUNT ON

    EXEC dbo.SP_B
END

示例SP_B代码:

CREATE PROCEDURE dbo.SP_B
AS
BEGIN
    SELECT * FROM dbo.SOME_TABLE
END

从SP_B过程中进行选择会打印受影响的行数吗?

1 个答案:

答案 0 :(得分:3)

SET NOCOUNT ON将防止存储过程或任何嵌套的存储过程(或动态批处理)发送行计数消息。如果嵌套过程或批处理将NOCOUNT OFF设置为行,则将为该批处理中的语句发送行计数消息,但是当控制权返回到外部proc / batch时,将恢复NOCOUNT OFF行为。