调用sp in循环

时间:2014-05-04 20:16:09

标签: sql-server stored-procedures reporting-services cursor temp-tables

我用它来多次调用sp

     declare @field1 date
     declare cur CURSOR LOCAL for
     select  b.thedate from [GENESIS_SCO].[dbo].ExplodeDates('20140415','20140417') b
     open cur
     fetch next from cur into @field1
     while @@FETCH_STATUS = 0 BEGIN
     exec GENESIS_SCO..Get_TTIRA3 N'2101', @field1,1,9901023
     fetch next from cur into @field1
     END
     close cur
     deallocate cur

这将返回一个数据集n次,其中n是循环运行的次数。对于这些参数,它为field1的不同值返回50,60和120行。

我需要一个数据集中的所有230行(50 + 60 + 120)行,以便我可以在SSRS中使用它进行报告。

假设在第一次迭代中返回

    VALUE | CODE
   --------------
    BLUE  | 234
    PINK  | 755
    LILAC | 734

第二次迭代

    VALUE   | CODE
   --------------
    RED     | 245
    SILVER  | 755
    BLACK   | 76555

在第三次迭代中

    VALUE        | CODE
   -------------------
    BROWN        | 9282
    QUICKSILVER  | 2542
    YELLOW       | 55

我需要的是

     VALUE       | CODE
   --------------------
    BLUE         | 234
    PINK         | 755
    LILAC        | 734
    RED          | 245
    SILVER       | 755
    BLACK        | 76555
    BROWN        | 9282
    QUICKSILVER  | 2542
    YELLOW       | 55

1 个答案:

答案 0 :(得分:0)

您可以使用表变量(在SQL Server 2000之上)或临时表来累积其中生成的记录集。

 declare @field1 date
 declare @tmp table(value varchar(20), code int)
 declare cur CURSOR LOCAL for
 select  b.thedate from [GENESIS_SCO].[dbo].ExplodeDates('20140415','20140417') b
 open cur
 fetch next from cur into @field1
 while @@FETCH_STATUS = 0 BEGIN
 insert @tmp exec GENESIS_SCO..Get_TTIRA3 N'2101', @field1,1,9901023
 fetch next from cur into @field1
 END
 close cur
 deallocate cur
 select * from @tmp