SQL存储过程嵌套循环不生效 仅返回指定年份12个月数据
问题排查与修复方案
核心问题原因
- 月份变量未重置:第一次外循环遍历完指定年份的12个月后,
@CurrentMonth的值已经累加至13,当外循环进入上一年的逻辑时,内层循环的判断条件@CurrentMonth <= 12直接不成立,因此上一年的所有数据获取逻辑都没有执行。 - 参数定义语法错误:存储过程的入参定义部分,
@YearParam nvarchar(4)后缺少逗号分隔,会直接导致存储过程创建失败。
修复后完整代码
CREATE OR ALTER PROCEDURE GetCallReport @YearParam nvarchar(4), @MonthParam nvarchar(2) AS --BEGIN SET NOCOUNT ON DECLARE @CurrentYear INT DECLARE @CurrentMonth INT SET @CurrentYear = CAST(@YearParam AS INT) WHILE (@CurrentYear >= (CAST(@YearParam AS INT) -1)) BEGIN -- 每次新年份循环开始时重置月份为1 SET @CurrentMonth = 1 WHILE (@CurrentMonth <= 12) BEGIN EXEC GetPrincipalReport @MonthParam = @CurrentMonth ,@YearParam = @CurrentYear Set @CurrentMonth = @CurrentMonth + 1 END Set @CurrentYear = @CurrentYear - 1 END --END --EXEC PROCEDURE EXEC GetCallReport @YearParam = '2021'
额外优化提示
如果后续需要调整获取的月份跨度,只需要修改外循环的判断条件即可,比如要获取近3年的数据,将CAST(@YearParam AS INT) -1调整为CAST(@YearParam AS INT) -2即可。
内容的提问来源于stack exchange,提问作者Juan Lozano
相关产品推荐
相关产品推荐

