2013-12-18 5 views
1

나는 날짜가있는 DateServiceStart 열을 업데이트해야하는 20000 + 레코드가있는 테이블이 있지만 모든 20k 레코드에 대해 단일 날짜로 설정하고 싶지 않습니다. .일괄 처리의 SQL Server 루프 업데이트

나는 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 열이 당신이 커서 나 While 루프가 필요합니다 경우이 같은 순차적 뭔가

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

를 작동 할 경우.

0

내 생각은 big.so 나는 그것을 여기에서 쓰고있다. 그것을

것은 어떤 NTILE를 사용하여 업데이트 테이블 열에 적용 (5) ROWNUM이 1,2,3,4,5처럼 생성되도록 ROW_NUMBER/순위/dense_rant을 만들 루프의 매우 easy.no 필요성을 , 1,2,3,4,5 ........ 끝까지.

이제 다시

1,2,3,4,5 업데이트 모두 가입 ROWNUM과 날짜 범위를 만듭니다.

원본 테이블과 날짜 범위의 atleast 10 행을 보여줍니다. 내가 쿼리를 작성합니다.