예를 들면,
lesson_date lesson_no
2015-04-01 1
2015-04-02 2
2015-04-03 3
2015-04-04 4
2015-04-05 5
2015-04-06 6
.
.
.
.
이런 식의 데이터가 있는데
4월2일의 lesson_no 2를 3으로 변경하고 그 다음날짜들도 하나씩 밀려야 하는 상황이라
커서를 사용하면 편하겠다 싶었는데,
대부분 예제들에서 보이는
WHILE @@FETCH_STATUS=0
Begin
Update Table
FETCH NEXT FROM cursor into variables....
End
이런 식이 아닌
WHILE @@FETCH_STATUS=0
Begin
FETCH NEXT FROM cursor into variables....
Update Table
End
위와 같이 먼저 다음 값들을 가져 오게 했는데,
제가 원하는데로 안되고, 그냥 그 값 그대로 update가 되더라구요.
왜 그럴까 보니
MSDN에
'현재 행 바로 다음의 결과 행을 반환하며 현재 행을 반환되는 행 앞의 행으로 만듭니다. 커서에 대해 FETCH NEXT가 첫 번째 인출인 경우에는 결과 집합의 첫 번째 행을 반환합니다. NEXT는 커서 인출의 기본 옵션입니다.'
커서를 사용해서 위의 처리는 안될까요?
declare cursor ccc for
select * from table
open ccc
FETCH NEXT FROM cursor into variables....
WHILE @@FETCH_STATUS=0
Begin
Update Table
FETCH NEXT FROM cursor into variables....
End
이런식 아닌가요??
좀만더 고민하면 커서가 아닌 업데이트 한번으로 될거 같은데요..