SQL Server循环更新批量为20

时间:2013-12-18 13:04:14

标签: sql sql-server sql-server-2008

我有问题,我有一个20000+记录的表我需要使用日期更新DateServiceStart列,但我不想将其设置为所有20k记录的单个日期。

我希望在5天内传播日期,当你到达表格中的第6行时,我想循环回来并使用开始日期。

我已经有了更新语句而不确定如何循环?任何帮助表示赞赏!

RowNum | DateServiceStart
1 | 01/01/2014
2| 02/01/2014
3| 03/01/2014
4| 04/01/2014
5| 05/01/2014
...
6|01/01/2014
7|02/01/2014

3 个答案:

答案 0 :(得分:1)

如果RowNum列是连续的,那么这将起作用

UPDATE yourTable SET DateServiceStart = DATEADD(day, (RowNum % 5), GETDATE())

如果您需要光标或while循环。

答案 1 :(得分:1)

如果表格中有ID个关键字段(或者您可以将其更改为ROWNUM,如果表格中存在该字段),请尝试以下查询:

with CTE as 
(SELECT id,
        DateServiceStart,
        ROW_NUMBER() OVER (ORDER BY id) as rn       
  FROM t )

UPDATE CTE 
 SET DateServiceStart
       =CAST('01/01/2014' as Datetime)+(rn-1)%5

SQLFiddle demo

答案 2 :(得分:0)

我的想法很大。所以我在这里写。 看得很简单。不需要循环

使用 ntile(5)在您的更新表列中创建row_number / rank / dense_rant 这样rownum的创建就像1,2,3,4,5,1,2,3,4,5 ........直到最后。

现在再次使用rownum 1,2,3,4,5

创建日期范围

加入两者进行更新。

显示至少10行原始表和日期范围。所以我写了查询。