2012-07-19 51 views
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日到今天的每一天插入行,除了日期字段(应该是实际日期)之外的所有字段具有相同值的现有日期。

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

谢谢。

回答

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 
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。之后,一切都变得相对简单。