while循环创建重复记录

时间:2018-02-09 17:01:58

标签: sql sql-server while-loop

我有一个非常简单的查询,它有两个日期(开始和结束日期,例如:01/01 / 2018-01 / 31/2018),然后取出开始和结束日期的周数(例如:1和5)。我使用while循环以在一个表中输入所有周数(例如:1,2,3,4,5)。我的while循环正在创建重复记录,例如所有值的多个记录。我不确定是什么问题。有人可以建议我可能做错了吗?

代码:

DECLARE @StartDate datetime = '01/01/2018'
    ,@EndDate datetime = '01/31/2018'
DECLARE @StartDateWeek INT  = DATEPART(WK,@StartDate)
    ,@EndDateWeek INT   = DATEPART(WK,@EndDate)
SELECT @StartDateWeek,@EndDateWeek

DECLARE @DateRangeWeekList TABLE(
Date DATE
,WeekNumber INT)

INSERT INTO @DateRangeWeekList
SELECT  Date = @StartDate
        ,WeekNumber = @StartDateWeek
select * from @DateRangeWeekList


WHILE (SELECT MAX(WeekNumber) FROM @DateRangeWeekList) < (SELECT     @EndDateWeek)
BEGIN
INSERT INTO @DateRangeWeekList
SELECT  Date = null
        ,WeekNumber = WeekNumber +1
FROM @DateRangeWeekList
END

select * from @DateRangeWeekList

结果:

Date        WeekNumber
2018-01-01  1
NULL        2
NULL        2
NULL        3
NULL        2
NULL        3
NULL        3
NULL        4
NULL        2 and more (total 18 records)

预期结果

Date       WeekNumber
2018-01-01 1
NULL       2
NULL       3
NULL       4
NULL       5

2 个答案:

答案 0 :(得分:3)

这里的递归CTE要比%quickref循环好得多:

WHILE

但是,您也可以考虑使用Calendar表。那里有很多选择。

答案 1 :(得分:1)

也许您可以尝试使用此格式插入您的值。

INSERT INTO @DateRangeWeekList (Date, WeekNumber)
VALUES (null, WeekNumber +1)