对不存在日期的变量日期字段进行批量插入?
问题描述:
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日到今天的每一天插入行,除了日期字段(应该是实际日期)之外的所有字段具有相同值的现有日期。
我想批量插入所有行,但不知道如何调整日期字段 并检查现有日期。
谢谢。
答
尝试通过日期循环的存储过程。或者更好的是,制作一个日期表并从中选择。这将是更快。例如:
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
答
我会使用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。之后,一切都变得相对简单。