我有一个存储过程,它接受两个参数:开始日期和结束日期,格式为 YYYYMM。该字段的格式(在底层表中只是 int)。
存储过程本质上是获取两个时期之间的变动或差异,并且要求该变动是每月的,例如 202301 和 202302 之间的金额变动。
我想要做的是能够将每个增量日期传递给存储过程(可能来自具有两列的表:key、year_month),例如传递 202301 和 202302 并将数据插入到预先创建的表中,然后 202302 和 202303 并将数据再次传递到预先创建的表等中。
我如何循环遍历这样一个表(类似于每一行......)并不断地将变量传递给存储过程的参数?
或者也许我不需要创建和循环表;也许使用类似日期添加功能的东西?
谢谢
您可以使用光标
一般来说,在 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;