好的,我有一个关于从多个存储过程返回记录集的问题。
如果我有一个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...)
但这不起作用。
关于如何处理这个的任何想法?
答案 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值上转动以创建一个包含三列的行。