SQL循环将临时表中的值作为参数传递给存储过程

SQL循环将临时表中的值作为参数传递给存储过程,sql,sql-server,loops,stored-procedures,sql-server-2016,Sql,Sql Server,Loops,Stored Procedures,Sql Server 2016,使用SQL Server 2016,我对我们的财务部门有一个巨大的查询,它使用@Year和@FinPeriod将交易与一个期间进行匹配。对于报告,我们通常将单个值传递到存储过程中。但现在我们需要用通常动态生成的数据填充底层表 有没有人可以帮忙的循环?我有一个临时表,其中包含年份值列和每个年份的finperiod。我希望在这个表中循环—将年份和期间一个接一个地传递给存储过程,直到它们都运行完毕 存储过程元素对我来说很好,只要让循环/传递部分工作就可以了 到目前为止,我已经: declare @f

使用SQL Server 2016,我对我们的财务部门有一个巨大的查询,它使用
@Year
@FinPeriod
将交易与一个期间进行匹配。对于报告,我们通常将单个值传递到存储过程中。但现在我们需要用通常动态生成的数据填充底层表

有没有人可以帮忙的循环?我有一个临时表,其中包含年份值列和每个年份的finperiod。我希望在这个表中循环—将年份和期间一个接一个地传递给存储过程,直到它们都运行完毕

存储过程元素对我来说很好,只要让循环/传递部分工作就可以了

到目前为止,我已经:

 declare @fiscalyearid numeric(9)
 declare @FiscalYear numeric(9)
 declare @FiscalMonthOfYear numeric(9)
 declare @Year numeric(9)
 declare @FinPeriod numeric(9)

 if object_id('tempdb..#dateloop','u') is not null 
     drop table #dateloop

 select distinct 
     identity(int,1,1) as ID,
     FiscalYear_int, FiscalMonthOfYear 
 into 
     #dateloop 
 from 
     [DW].[DDS].[dimDate] 
 where 
     FiscalYear_int = '2018'

DECLARE C CURSOR LOCAL FAST_FORWARD FOR --
    SELECT 
        ID, FiscalYear_int, FiscalMonthOfYear 
    FROM
        #dateloop;

OPEN C;

FETCH C INTO @FiscalYear, @FiscalMonthOfYear;

WHILE @@FETCH_STATUS = 0 
BEGIN
    EXEC [dbo].[Origen_Reporting->SSRS_Capex_Monitoring_Report_Expenditure]     @Year, @FinPeriod

    FETCH C INTO @Year,@FinPeriod
END 

CLOSE C;
DEALLOCATE C; 

任何提示都会很好。谢谢

我想您希望光标逻辑正常工作。下面是可以用来循环日期并在循环中调用proc的代码

DECLARE C CURSOR LOCAL FAST_FORWARD FOR --
    SELECT 
        FiscalYear_int, FiscalMonthOfYear 
    FROM
        #dateloop;

OPEN C;

Fetch next  from c into @FiscalYear, @FiscalMonthOfYear

WHILE @@FETCH_STATUS = 0 
BEGIN


    select  @FiscalYear, @FiscalMonthOfYear --exec proc passing these values
    EXEC [dbo].[Origen_Reporting->SSRS_Capex_Monitoring_Report_Expenditure]     @FiscalYear, @FiscalMonthOfYear
    FETCH next from c INTO @FiscalYear,@FiscalMonthOfYear
END 

CLOSE C;
DEALLOCATE C; 

您可以联接整个表(有年份),只获取所需数据。但这取决于您将如何使用它