代码之家  ›  专栏  ›  技术社区  ›  Jack Marchetti

(SQL)如何从多个执行的存储过程返回结果集?

  •  0
  • Jack Marchetti  · 技术社区  · 16 年前

    好的,我想问一下从多个存储过程返回记录集的问题。

    如果我有一个sproc可以做到这一点:

    exec sproc1
    exec sproc2
    exec sproc3
    

    每个sproc只返回一个数字,因此它返回

    [无列名]

    [无列名] 18000

    [无列名] 1253

    DECLARE @Table (Col1, Col2)
    
    INSERT INTO @Table
    exec sproc1,exec sproc2, etc...)
    

    1 回复  |  直到 16 年前
        1
  •  1
  •   Matt Hamilton    16 年前

    DECLARE @t TABLE (Value int);
    
    INSERT INTO @t
    EXEC sproc1;
    
    INSERT INTO @t
    EXEC sproc2;
    
    INSERT INTO @t
    EXEC sproc3;
    
    SELECT Value FROM @t;
    

    编辑

    NextResult()

    编辑2

    你问是否有办法将所有结果滚动到一行。我可以想到一种方法来做到这一点,但它绝对不漂亮,我相信我会在评论中受到更多精通SQL的用户的批评,但这里是:

    DECLARE @t TABLE (Id int identity, Value int);
    
    INSERT INTO @t (Value)
    EXEC sproc1;
    
    INSERT INTO @t (Value)
    EXEC sproc2;
    
    INSERT INTO @t (Value)
    EXEC sproc3;
    
    SELECT Value FROM @t
    PIVOT ( AVG(Value) FOR Id IN ([1], [2], [3]) ) AS t;
    

    因此,将三个值作为单独的行插入,然后围绕Id值旋转以创建一个有三列的单行。

    推荐文章