我有问题,我有一个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
答案 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
答案 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行原始表和日期范围。所以我写了查询。