Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在日期范围内每天插入一行?_Sql_Sql Server 2005 - Fatal编程技术网

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

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

我有一个表,每一行都有一个ID、Date和Value列。我希望这样,每次有人访问我网站上的某个页面时,都会运行一个存储过程,如果某一天不存在,则该存储过程会在某个范围内为该天插入一行

日期范围为2012年1月1日至访问该页面当天前的星期六。ID将自动生成,值字段将保持空/空


例如,如果我今天访问该页面,我希望在表中记录从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。