如何在SQL Server中自动增加日期?

问题描述

我有两个sql Server表,tb_examAuxiliary_Calculator

tb_exam

Date(FK)    Degree   Module   Hall
----------------------------------
2020-11-18  CS       M1       H1
2020-11-19  SE       M2       H2
2020-11-20  CS       M3       H1

Auxiliary_Calculator

Date(PK)    KindOfDays
----------------------------------
2020-11-18  BankDay
2020-11-19  BankDay
2020-11-20  BankDay
2020-11-21  Holiday

tb_exam的Date列是Auxiliary_Calculator表的Date列的外键。

我想在tb_exam表的 Date 列中自动递增,并加入这两个表,使其看起来像这个

Date(FK)    KindOfDays   Degree   Module   Hall
------------------------------------------------
2020-11-18  BankDay      CS       M1       H1
2020-11-19  BankDay      SE       M2       H2
2020-11-20  BankDay      CS       M3       H1

我尝试以这种方式递增。但是我不知道如何编写查询显示最终表。

CREATE PROCEDURE [dbo].[AutoIncrementDate]
@StartDate DATETIME,@EndDate DATETIME
AS
WITH tb_exam
AS
(
SELECT DATEADD(D,DATEDIFF(D,@StartDate),0) AS Dt
UNION ALL
SELECT DATEADD(D,1,Dt)
FROM tb_exam
WHERE Dt BETWEEN @StartDate AND DATEADD(D,-1,@EndDate)
)
SELECT *
FROM tb_exam
GO

有人可以帮我修改吗?

解决方法

如果自动增量是唯一的问题,这应该可以解决问题:

DECLARE @StartDate DATE = '2020-11-01'
DECLARE @EndDate DATE = '2020-12-01'

;WITH cteDates AS(
  SELECT @StartDate AS dt
  UNION ALL
  SELECT DATEADD(d,1,dt)
    FROM cteDates
    WHERE dt < @EndDate
)
SELECT d.dt,ac.KindOfDays,e.Degree,e.Module,e.Hall
  FROM cteDates d
  LEFT JOIN Auxiliary_Calculator ac ON ac.Date = d.dt
  LEFT JOIN tb_exam e ON e.Date = d.dt