0
Attendence
(
  Stu_id int
  Att_Id int
  Att_Date datetime
  Att_Num numeric(15,5)
)

该表主要包含考勤记录。我试图找到从 2012 年 1 月 1 日到今天输入缺失日期行的逻辑。

假设此期间有一个出勤记录row (1,1,'2012-05-06',1.20000)。然后,我想为从 2012 年 1 月 1 日到今天的每一天插入行,除了现有日期之外,所有字段的值都相同,但应该是实际日期的日期字段除外。

我正在尝试批量插入所有行,但不知道如何调整日期字段并检查现有日期。

谢谢。

4

2 回答 2

0

尝试一个循环遍历日期的存储过程。

或者更好的是,制作一个日期表并从中进行选择。这会快得多。就像是:

INSERT INTO Attendence (Stu_id, Att_Id, Att_Date, Att_Num)
SELECT a.Stu_id, a.Att_Id, d.TheDate, a.Att_Num
FROM Attendence a
INNER JOIN Dates d ON d.TheDate BETWEEN '2012-01-01' AND GETDATE() 
    AND d.TheDate <> a.Att_Date
于 2012-07-19T17:34:19.857 回答
0

我会使用 DateDiff 函数来计算函数中的日期和相关日期之间的天数。创建一个 DateTime 变量并将其值设为 2012 年 1 月 1 日。然后设置一个 while 循环,该循环从 DateDiff 函数中循环天数。

在伪中,while 循环看起来像这样。

@DaysTill = DateDiff(days, 1/1/2012, @SomeDate)
While @DaysTill>0
    @@Check = Select Count(Att_Date) From Attendance where AttDate = DateAdd(days, @DaysTill, Jan 1st 2012)
    IF @@Check = 0 THEN Insert Into Attendance VALUES @Stu, @Id, DateAdd(days, @DaysTill, Jan 1st 2012), @numeric
    @DaysTill = @DaysTill - 1
END

主要是了解 DateAdd 和 DateDiff。之后,一切都变得相对简单。

于 2012-07-19T17:48:51.667 回答