对于不存在的日期,使用可变日期字段批量插入?

时间:2012-07-19 17:29:07

标签: tsql

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日到今天每天插入行,除了现有日期以外的所有字段都有相同的值,除了日期字段应该是实际日期。

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

感谢。

2 个答案:

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