2013-12-18 132 views
1

我有問題,我有一個20000+記錄的表,我需要更新DateServiceStart列的日期,但我不想將它設置爲所有20k記錄的單一日期。批量的SQL Server循環更新20

我想分散日期說超過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 

回答

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

+0

這是完美的,我已經得到它運行,它非常簡單! 非常感謝 –

+0

優秀@ Valex.it比我的想法更好。 – KumarHarsh

1

如果RowNum列順序像這樣的工作

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

如果你需要一個光標或while循環。

0

我的想法是big.so我寫在這裏。 看到它非常easy.no需要循環的

創建ROW_NUMBER /等級/ dense_rant任何適用於使用NTILE您更新表列(5) 這樣的rownum就像1,2,3,4,5創建,1,2,3,4,5 ........直到最後。

現在再次創建日期範圍與rownum 1,2,3,4,5

加入兩個更新。

顯示至少10行的原始表和日期range.so我寫查詢。