Sql 如何在日期范围内每天插入一行?
我有一个表,每一行都有一个ID、Date和Value列。我希望这样,每次有人访问我网站上的某个页面时,都会运行一个存储过程,如果某一天不存在,则该存储过程会在某个范围内为该天插入一行 日期范围为2012年1月1日至访问该页面当天前的星期六。ID将自动生成,值字段将保持空/空Sql 如何在日期范围内每天插入一行?,sql,sql-server-2005,Sql,Sql Server 2005,我有一个表,每一行都有一个ID、Date和Value列。我希望这样,每次有人访问我网站上的某个页面时,都会运行一个存储过程,如果某一天不存在,则该存储过程会在某个范围内为该天插入一行 日期范围为2012年1月1日至访问该页面当天前的星期六。ID将自动生成,值字段将保持空/空 例如,如果我今天访问该页面,我希望在表中记录从2012年1月1日到2012年3月3日的每一天。这将获取所有尚不存在的日期,并排除上周六之后的行 ;WITH d AS ( SELECT TOP (366) d = DAT
例如,如果我今天访问该页面,我希望在表中记录从2012年1月1日到2012年3月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());
请注意,我假设您将在日历年结束后重置此项。此项将获取所有尚不存在的日期,并排除上一个星期六之后的行
;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());
请注意,我假设您会在日历年结束后重置此设置。只需在存储过程中创建一个循环。@Daniel肯定有比循环更优雅的解决方案。@AaronBertrand:我假设,这就是为什么我只是把它作为一条评论发布:-只要在存储过程中创建一个循环。@Daniel肯定有比循环更优雅的解决方案。@AaronBertrand:我想,这就是为什么我只是把它作为一条评论发布:-如果页面在周六被点击,我想得到上一个周六。我不在乎是不是那个周六晚上11:59:59,我想检索上一个周六。我添加的附加WHERE子句就是这样做的。如果你在3/3点击该页面,它将只返回到2/25。如果该页面在周六点击,我想得到上一个周六。我不在乎是不是那个周六晚上11:59:59,我想检索上一个周六。我添加的附加WHERE子句就是这样做的。如果你在3/3点击页面,它只会返回到2/25。