如何从存储过程中抑制存储过程的结果?

Bri*_*ian 20 t-sql stored-procedures

我有一个存储过程(我们称之为A)调用另一个存储过程(我们称之为B).B包括一个我不想发回给A的调用者的SELECT.

这是一些非常粗糙的伪代码,但它应该得到了这个想法.

PROCEDURE A
    CURSOR
        CALL B -- I WANT TO SUPPRESS THE RESULTS FROM B
    END
    SELECT *
END
PROCEDURE B
    Do some interesting things
    SELECT *
END
Run Code Online (Sandbox Code Playgroud)

如上所述,A调用B和B执行我想要的一些操作并返回我不关心的结果.A完成后,返回自己的一组结果.

如何抑制A中B的结果?我正在使用SQL Server 2005.我宁愿不对B进行更改,因为它工作起来比我想要的更复杂.

Jos*_*rke 32

你可以尝试这样的事情:

/* Assume this table matches the output of your procedure */
DECLARE @tmpNewValue TABLE (newvalue int)
INSERT INTO @tmpNewValue 
EXEC ProcedureB
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的问题是你只能嵌套`insert into exec`.因此,如果您在父级中使用相同的方法,事情就会崩溃. (4认同)
  • 这是一个很好的解决方案.但它仍然会导致开销,不是吗?我认为应该有一个像`SET NORESULTSETS ON'这样的选项.我几乎总是称SP为副作用,我对它的输出不感兴趣. (2认同)