[英]nested loop for a stored procedure in sql not working
您好我正在嘗試循環具有month
和year
輸入的存儲過程。
我試圖從當年開始循環 24 個月,但問題是我只得到當年的月份和年份,它沒有給我完整的 24 個月
這是我的代碼
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)
SET @CurrentMonth = 1
WHILE (@CurrentYear >= (CAST(@YearParam AS INT) -1))
BEGIN
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'
有了這個,我只能得到 2021 年的 12 個月,而不是 2020 年的 12 個月。
謝謝您的幫助
除了一個小問題,您的代碼中的一切都很好。
您沒有將@CurrentMonth
的值重置回1
,以便內部循環可以再次運行(12 次)
.............
Set @CurrentMonth = @CurrentMonth + 1
END
Set @CurrentYear = @CurrentYear - 1
Set @CurrentMonth = 1 //resetting back to first month
問題是 current_month,在第一個 current_year 循環運行后不會重置。
在我看來,一種更簡潔的方法是使用日期算術。
ALTER PROCEDURE dbo.GetCallReport
@YearParam nvarchar(4)
,@MonthParam nvarchar(2)
AS
--BEGIN
SET NOCOUNT ON
DECLARE @i int
DECLARE @report_date date
SET @i = 1
SET @report_date = CAST(CONCAT(@YearParam,'-',@MonthParam,'-01') as DATE)
WHILE (@i<=24)
BEGIN
EXEC GetPrincipalReport @MonthParam = DATEPART(MONTH,DATEADD(MONTH,-@i,@report_date))
,@YearParam = DATEPART(MONTH,DATEADD(MONTH,-@i,@report_date))
SET @i = @i+1
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.