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日到今天每天插入行,除了现有日期以外的所有字段都有相同的值,除了日期字段应该是实际日期。
我正在尝试批量插入所有行,但不知道如何调整日期字段 并检查现有日期。
感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
我会使用DateDiff函数来计算函数中日期和相关日期之间的天数。创建一个DateTime变量,并将其赋值为2012年1月1日。然后设置一个while循环,循环DateDiff函数的天数。
在psuedo中,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。之后,一切都变得相对简单。