SQL LOOP将临时表中的值作为参数传递给存储过程
问题描述:
使用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;
任何提示将是辉煌的。谢谢
答
我想你想让你的光标逻辑工作。以下是您可以用来循环查看日期和循环调用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
您可以加入整个表(已年)和data..but这取决于你如何去使用它 – TheGameiswar