Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 2008 插入具有多个Id的日期范围SQL Server 2008_Sql Server 2008_Datetime_Date Range - Fatal编程技术网

Sql server 2008 插入具有多个Id的日期范围SQL Server 2008

Sql server 2008 插入具有多个Id的日期范围SQL Server 2008,sql-server-2008,datetime,date-range,Sql Server 2008,Datetime,Date Range,我有一个由@starDate和@EndDate定义的日期范围。我需要将每个userId的日期范围插入表中 例如,我有两个约会 @StarDate = '2012/05/02' @EndDate = '2012/05/06' 用户ID:1-2-3 我想要这些结果 UserID Date ------------------------ 1 - 2012/05/02 1 - 2012/05/03 1 - 2

我有一个由
@starDate
@EndDate
定义的日期范围。我需要将每个
userId
的日期范围插入表中

例如,我有两个约会

 @StarDate = '2012/05/02' 
 @EndDate = '2012/05/06'  
用户ID:
1-2-3

我想要这些结果

UserID      Date
------------------------        
1     -     2012/05/02  
1      -    2012/05/03  
1       -   2012/05/04  
1       -   2012/05/05  
1       -   2012/05/06  
2       -   2012/05/02  
2       -   2012/05/03  
2       -   2012/05/04  
2       -   2012/05/05  
2       -   2012/05/06  
3       -   2012/05/02  
3       -   2012/05/03  
3       -   2012/05/04  
3       -   2012/05/05  
3       -   2012/05/06 

一种方法是使用递归CTE:

with dates as (
      select @StartDate as dte
      union all
      select dateadd(day, 1, @StartDate)
      from dates
      where dateadd(day, 1, @StartDate) <= @EndDate
     ),
     users as (
      select 1 as userid union all select 2 union all select 3
     )
select users.userid, dates.dte
from users cross join dates;

注意:这假设开始日期和结束日期变量实际上存储为日期。否则您需要转换它们。

谢谢您修复我的问题!!
with dates as (
      select @StartDate as dte
      union all
      select dateadd(day, 1, @StartDate)
      from dates
      where dateadd(day, 1, @StartDate) <= @EndDate
     ),
     users as (
      select 1 as userid union all select 2 union all select 3
     )
insert into table2(userid, date)
    select users.userid, dates.dte
    from users cross join dates;