遍历行并在临时表中插入数据-SQL Server 2008

遍历行并在临时表中插入数据-SQL Server 2008,sql,sql-server,sql-server-2008,loops,iteration,Sql,Sql Server,Sql Server 2008,Loops,Iteration,我有一些数据如下 Duration Start Date ========================== 2 11/11/2014 1 11/6/2014 3 11/22/2014 Date =========== 11/11/2014 11/12/2014 11/6/2014 11/22/2014 11/23/2014 11/24/2014 我想迭代以上三行并生成如下输出 Duratio

我有一些数据如下

Duration        Start Date
==========================
2               11/11/2014
1               11/6/2014
3               11/22/2014
Date
===========
11/11/2014
11/12/2014
11/6/2014
11/22/2014
11/23/2014
11/24/2014
我想迭代以上三行并生成如下输出

Duration        Start Date
==========================
2               11/11/2014
1               11/6/2014
3               11/22/2014
Date
===========
11/11/2014
11/12/2014
11/6/2014
11/22/2014
11/23/2014
11/24/2014

以开始日期按持续时间递增日期,并为每个日期创建单独的行

不要迭代,而是使用基于集合的方法,如

WITH Nums AS(
    SELECT DISTINCT Value = number 
    FROM master..[spt_values] 
)
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration
请注意,此方法仅在2164年之前有效。另一种方法是使用数字表。阅读:

如果要将其插入到另一个表中,可以通过以下方式使用:

WITH Nums AS(
    SELECT DISTINCT Value = number 
    FROM master..[spt_values] 
)
INSERT INTO #TempTable ([Date]) 
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration

不要迭代,而是使用基于集合的方法,如

WITH Nums AS(
    SELECT DISTINCT Value = number 
    FROM master..[spt_values] 
)
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration
请注意,此方法仅在2164年之前有效。另一种方法是使用数字表。阅读:

如果要将其插入到另一个表中,可以通过以下方式使用:

WITH Nums AS(
    SELECT DISTINCT Value = number 
    FROM master..[spt_values] 
)
INSERT INTO #TempTable ([Date]) 
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration

有很多方法可以做到这一点,你试过哪些呢?老实说,我试过使用循环和CTE,但没有用;我是SQL新手,所以有很多方法可以做到这一点,你试过哪些方法?老实说,我试过使用循环和CTE,但没有用;我是SQL soThanks的新手Tim,让我试试这个。谢谢Tim,让我试试这个。