代码之家  ›  专栏  ›  技术社区  ›  skolima

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

  •  20
  • skolima  · 技术社区  · 17 年前

    我有一个存储过程(我们称之为a),它调用另一个存储过程(我们称之为B)。B包括我不想发送回a的调用方的选择。

    PROCEDURE A
        CURSOR
            CALL B -- I WANT TO SUPPRESS THE RESULTS FROM B
        END
        SELECT *
    END
    PROCEDURE B
        Do some interesting things
        SELECT *
    END
    

    正如您在上面所看到的,A调用B,B做一些我想要的事情,并返回我不关心的结果。完成后,它将返回自己的结果集。

    如何抑制A中B的结果?我正在使用SQLServer2005。我不想对B进行更改,因为它工作正常,而且比我想处理的更复杂。

    3 回复  |  直到 8 年前
        1
  •  33
  •   JoshBerke    17 年前

    /* Assume this table matches the output of your procedure */
    DECLARE @tmpNewValue TABLE (newvalue int)
    INSERT INTO @tmpNewValue 
    EXEC ProcedureB
    
        2
  •  1
  •   Jim Birchall    17 年前

    我真的很笨,但“做一些有趣的事情”不应该在另一个程序中吗?

        3
  •  1
  •   Peter Radocchia    14 年前

    这里是对proc a&的轻微修改;B那将适合你的需要:

    PROCEDURE A
        CURSOR
            CREATE TABLE #__suppress_results (col1 int)
            CALL B -- I WANT TO SUPPRESS THE RESULTS FROM B
        END
        SELECT *
    END
    PROCEDURE B
        Do some interesting things
        IF OBJECT_ID('tempdb..#__suppress_results') IS NULL BEGIN
          SELECT *
        END
    END
    

    这避免了嵌套的问题 INSERT...EXEC ,并保留proc B的现有行为。如果其他调用proc已创建名为 #__suppress_results #__@supress_results .

    这是有效的,因为 如果从proc A调用proc B,则在proc B内可见。