如何在日期范围内每天插入一行?

时间:2012-03-07 14:55:28

标签: sql sql-server-2005

我有一个表格,每一行都有一个IDDateValue列。我想要它,以便每次有人访问我的网站上的页面时,将运行一个存储过程,如果当天不存在,将在范围内的每一天插入一行。

日期范围是从2012年1月1日到当天(访问页面的那一天)之前的星期六。 <{1}}将自动生成,ID字段将保持为空/空白。

例如,如果我今天访问了该页面,我希望在2012年1月1日至2012年3月3日之间的每一天都能在表格中记录一条记录。

1 个答案:

答案 0 :(得分:3)

这可以获取所有尚未存在的日子,并排除上周六之后的行。

;WITH d AS 
(
  SELECT TOP (366) d = DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY object_id), '20111231')
  FROM sys.all_objects
)
INSERT dbo.[a table]([Date])
  SELECT d FROM d 
  WHERE d NOT IN (SELECT [Date] FROM dbo.[a table])
  AND d <= DATEADD(DAY, 0-DATEPART(WEEKDAY, GETDATE()), GETDATE());

请注意,我认为你会重置&#34;一旦你的日历年结束了。