如何循环遍历变量列表以传递到 T-SQL 中的存储过程参数

问题描述 投票:0回答:1

我有一个存储过程,它接受两个参数:开始日期和结束日期,格式为 YYYYMM。该字段的格式(在底层表中只是 int)。

存储过程本质上是获取两个时期之间的变动或差异,并且要求该变动是每月的,例如 202301 和 202302 之间的金额变动。

我想要做的是能够将每个增量日期传递给存储过程(可能来自具有两列的表:key、year_month),例如传递 202301 和 202302 并将数据插入到预先创建的表中,然后 202302 和 202303 并将数据再次传递到预先创建的表等中。

我如何循环遍历这样一个表(类似于每一行......)并不断地将变量传递给存储过程的参数?

或者也许我不需要创建和循环表;也许使用类似日期添加功能的东西?

谢谢

loops tsql stored-procedures
1个回答
0
投票

您可以使用光标

一般来说,在 SQL 中使用游标不是一个好主意,因为 SQL 是一种基于集合的语言(并且应该避免 RBAR 操作)。但是,如果您已经有了存储过程并且由于任何原因无法更改它们,您可以尝试类似的操作:

DECLARE @fromDate INT;
DECLARE @toDate INT;
DECLARE @theDate DATE;
 
DECLARE cursor_example CURSOR FOR
SELECT TheDate
FROM dbo.allDates
 
OPEN cursor_example
FETCH NEXT FROM cursor_example into @theDate
WHILE @@FETCH_STATUS = 0
BEGIN 
    SET @fromDate = DATEPART(year,@theDate) * 100 + DATEPART(month,@theDate)
    SET @toDate = DATEPART(year,@theDate) * 100 + DATEPART(month,@theDate)
    EXEC dbo.MyStoredProcedure @fromDate, @toDate; 
 
FETCH NEXT FROM cursor_example into @theDate
END

CLOSE cursor_example;
DEALLOCATE cursor_example;
© www.soinside.com 2019 - 2024. All rights reserved.