2017-10-09 179 views
0

使用SQL Server 2016,我對財務部門有一個巨大的查詢,它使用@Year@FinPeriod來匹配具有句點的事務。而對於報告,我們通常會將單個值傳遞給存儲過程。但是現在我們需要使用通常在運行中生成的數據來填充基礎表。SQL LOOP將臨時表中的值作爲參數傳遞給存儲過程

有沒有人可以幫忙的循環?我有一個臨時表,每年的值列和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

您可以加入整個表(已年)和data..but這取決於你如何去使用它 – 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工程請客只得到必需的。 – user3735855

相關問題