【问题标题】:(SQL) How would I return the result set from multiple executed stored procedures?(SQL) 如何从多个执行的存储过程返回结果集?
【发布时间】:2009-10-15 03:03:05
【问题描述】:

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

如果我有一个执行此操作的存储过程:

exec sproc1
exec sproc2
exec sproc3

每个 sproc 只返回一个数字,所以它返回

[无列名] 1500

[无列名] 18000

[无列名] 第1253章

显然数据读取器无法处理此问题,或者至少我认为不会。于是想到了声明一个Table变量

DECLARE @Table (Col1, Col2)

INSERT INTO @Table
exec sproc1,exec sproc2, etc...)

但这不起作用。

关于如何处理这个问题的任何想法?

【问题讨论】:

    标签: sql stored-procedures


    【解决方案1】:

    将您的 INSERT 分布在多个语句中:

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

    编辑

    等等……你是说你已经有一个返回多个结果集的存储过程? DataReaders 绝对可以处理这个问题。只需使用NextResult() 方法告诉读者您现在需要下一个结果集中的数据。

    编辑 2

    您问是否有办法将所有结果汇总到一行中。我可以想到一种方法来做到这一点,但它绝对不漂亮,而且我相信我会受到 cmets 中更多精通 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 值为轴以创建具有三列的单行。

    【讨论】:

    • 在一行中?多个结果集?我想您可以向 @t 添加一个标识列并对其进行旋转以将列转换为行或其他内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2023-03-24
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多