2017-10-09 12 views
0

SQL Server 2016を使用して、@Year@FinPeriodを使用して期間とトランザクションを照合するFinance Deptの膨大なクエリがあります。また、レポートのために、通常、ストアドプロシージャに単一の値を渡します。しかし、今では、通常はその場で生成されるデータを基になるテーブルに移入する必要があります。SQL LOOPストアドプロシージャのパラメータとしてTemp Tableから値を渡す

誰も助けてくれるループがありますか?私は年の値の列とその年のそれぞれのための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; 

任意のヒントは素晴らしいだろう。ありがとうございます

+0

あなたは(何年持つ)テーブル全体に参加することができ、これはあなたが – TheGameiswar

答えて

1

私はあなたのカーソルロジックが動作したいと思います。以下は、日付をループしてループで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; 
+0

パーフェクトありがとう@ AB_87が御馳走を作品にそれを消費しようとしている方法によって異なりdata..butのみ必要ます。 – user3735855

関連する問題