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

时间:2009-10-15 03:03:06

标签: sql stored-procedures

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

如果我有一个sproc这样做:

exec sproc1
exec sproc2
exec sproc3

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

[无栏名] 1500

[无栏名] 18000

[无栏名] 1253

显然,datareader无法处理这个问题,或者至少我认为不会。所以我想到声明一个Table变量

DECLARE @Table (Col1, Col2)

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

但这不起作用。

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

1 个答案:

答案 0 :(得分: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;

修改

等等......你是说你已经有一个返回多个结果集的存储过程? DataReader绝对可以解决这个问题。只需使用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值上转动以创建一个包含三列的行。